码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法-快速排序

时间:2020-03-29 17:48:14      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:左右   数字   冒泡排序   递归   i++   排序   距离   使用   code   

快速排序算法思想:

快速排序是冒泡排序的改进算法。它也是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的元素从前面直接放到后面,关键字较小的元素直接从后面放到前面,从而减小了比较次数和交换次数。
 
对于近乎有序的数组,可采用起始值为数组中随机数字,否则会退化成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)
}

 

排序算法-快速排序

标签:左右   数字   冒泡排序   递归   i++   排序   距离   使用   code   

原文地址:https://www.cnblogs.com/Erick-L/p/12593575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!