排序算法-快速排序

Posted erick-l

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-快速排序相关的知识,希望对你有一定的参考价值。

快速排序算法思想:

快速排序是冒泡排序的改进算法。它也是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的元素从前面直接放到后面,关键字较小的元素直接从后面放到前面,从而减小了比较次数和交换次数。
 
对于近乎有序的数组,可采用起始值为数组中随机数字,否则会退化成O^2级别
对于含有大量重复的数组,可用左右两端双索引的方式去向中间靠拢排序,否则会退化成O^2级别(双路快速排序)
对于上面两个问题,最终优化使用三路快速排序,大于基准元素部分,小于基准元素部分和等于基准元素部分,之后对于小于,大于进行递归

v1版实现

template<typename T>
int __partition(T arr[],int l,int r){
    T v = arr[l];
    int j = l;
    for(int i = l+1;i<=r;i++)
        if (arr[i] < v){
            swap(arr[j+1],arr[i]);
            j++;
        }
    swap(arr[l],arr[j]);
}


template<typename T>
void __quickSort(T arr[],int l,int r){
    if(l >= r)
        return;
    int p = __partition(arr,l,r);
    __quickSort(arr,l,p-1);
    __quickSort(arr,p+1,r);
}

//快速排序
template<typename T>
void quickSort(T arr[],int n){
    __quickSort(arr,0,n-1)
}

 

以上是关于排序算法-快速排序的主要内容,如果未能解决你的问题,请参考以下文章

一行Python代码搞定快速排序算法

交换排序(冒泡排序快速排序的算法思想及代码实现)

排序算法 | 快速排序(含C++/Python代码实现)

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

十大经典排序算法总结(快速排序)

快速排序算法详解及代码实现