排序算法-快速排序
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) }
以上是关于排序算法-快速排序的主要内容,如果未能解决你的问题,请参考以下文章