经典排序算法之——快排

经典排序算法之——快排

时间复杂度:

  O(nlogn)

空间复杂度:

  O(log2n)

什么时候用快排

  1、n较大

  2、快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;

图解:

代码:

#include <stdio.h>

#define N 10

void my_qsort(int *arr,int l,int r)
{
    if(l<r)
    {
        //基准数
        int val = arr[l];
        int i = l;
        int j = r;
        while(i<j)
        {
            //从右向左找比基准数小的数
            while(i<j && arr[j] >= val)
                j--;
            //放到前面的空位
            if(i < j)
            {
                arr[i++] = arr[j];
            }
            //从左向右找比基准数大的数
            while(i<j && arr[i] <= val)
                i++;
            //放到后面的空位
            if(i < j)
            {
                arr[j--] = arr[i];
            }
        }
        //将基准数放入
        arr[i] = val;

        my_qsort(arr,l,i-1);
        my_qsort(arr,i+1,r);
    }
}

int main(void)
{
    int a[N] = {1,4,7,8,5,2,3,6,9,0};
    my_qsort(a,0,9);
    for(int i = 0;i<N;i++)
    printf("%d\t",a[i]);
    printf("\n");
    return 0;
}

 

posted @ 2022-07-18 17:04  西北小蚂蚁  阅读(285)  评论(0编辑  收藏  举报