快速排序(C语言)

思想:分治       递归

首先找到一个中间值

5    7    9       1      0

中间值      5

第一次     0         7       9            1       5 

0         1          9       7        5

#include
int arr[5] = { 5,6,9,8,7 };
void quick_sort( int l ,int r )
{

    int i = l - 1 ;
    int j = r + 1;
    int temp = 0;
    int x = arr[l];
    if( l >= r )
    {
        return ;
    }
    while( i < j )
    {
        do
        {
            i++;
        }while( arr[i] < x );
        
        do
        {
            j--;
        }
        while( arr[j] > x );
        
        if( i < j  )
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    quick_sort( l , j );
    quick_sort( j + 1 , r );  防止出现死循环
}


int main()
{
    int i = 0;
    quick_sort(0,4);
    for( i = 0 ; i <= 4 ; i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

你可能感兴趣的:(算法,数据结构,排序算法)