C语言-快速排序算法

版权声明:转载请注明出处 https://blog.csdn.net/qq_37689106/article/details/82959721
#include<stdio.h>
void quick_sort(int *array, int low, int high)
{
    if (low >= high) //返回条件
    {
        return ;
    }
    int first = low; 
    int last  = high;
    int key = array[first];//首先要标记一个key,(这个key可以任意的位置,不是固定不变的,只是相对的中心位置)
    while(first < last) //前面的first小于后面的last说明还没有结束一次的抽查。(头尾相等是结束的条件)
    {
        while(first < last && array[last] >key) //这是后面的一部分,本次是从小到大排序,所以假设(之所以假设是因为不确定key是否是哪个位置,便于理解先这么认为吧)先找到key后部分的,并且比key小的第一个值。
        {
            last --;
        }
        array[first] = array[last]; //将key后面的放到前面
        while(first < last && array[first]<key) //同上
        {
            first++;
        }
        array[last] = array[first];
    }
    array[first] = key; //first和last是相等的处于当前的中间位置,所以参数写last也是一样的,
    quick_sort(array,low,first-1); //因为是递归,所以重新开始,此时key是这个数组的相对中间分界线例如:5 9 4 key 10 15 12 ;(左边都小于右边的); 相当于排 5 9 4
    quick_sort(array,first+1,high); //key右边部分 10 15 12  一直递归直到排完返回。
}
int main()
{
    int i ;
    int array[] = {23,45,78,12,9,80,1};

    quick_sort(array,0,sizeof(array)/sizeof(int)-1);
    
    for(i=0; i<sizeof(array)/sizeof(int); i++)
    {
        printf("%-3d",array[i]);
    }
    printf("\n");
    return 0;
}

运行结果:
1 9 12 23 45 78 80
希望能帮助到你,由于时间原因我就没有给你们画上图,仅供参考。

猜你喜欢

转载自blog.csdn.net/qq_37689106/article/details/82959721