快速排序

快速排序

模板

模板每次选取的枢轴元素为中间的值

//快速排序算法
void quickSort(int a[],int l,int r){
    //递归边界判断
    if(l>=r) return ;
    //初始化指针
    //这里-1和+1是因为后面代码使用了do-while循环结构
    int i=l-1,j=r+1,x=a[i+j>>1];

    while(i<j){
        do i++; while(a[i]<x);
        do j--; while(a[j]>x);
        if(i<j) swap(a[i],a[j]);
    }

    //递归处理子问题
    quickSort(a,l,j),quickSort(a,j+1,r);
}

数据结构课本算法

下面给出的算法没有经过改进,对于基本已经排好序的待排序列来说,算法复杂度较高
可以对下面的算法进行改进,每次选取的枢轴元素为随机选取或者取中间的值

int Partition(int a[],int low,int high){
    int pivot=a[low];
    while(low<high){
        while(a[high]>pivot) high--;
        a[low]=a[high];
        while(a[low]<pivot) low++;
        a[high]=a[low];
    }
    a[low]=pivot;
    return low;
}

void quickSort(int a[], int low, int high)
{
    if(low<high){
        int pivot=Partition(a,low,high);
        quickSort(a,low,pivot-1);
        quickSort(a,pivot+1,high);
    }
}
posted @ 2022-05-15 16:34  小呆瓜瓜  阅读(21)  评论(0)    收藏  举报