快速排序算法的C++实现
Posted mingogo乔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法的C++实现相关的知识,希望对你有一定的参考价值。
时间复杂度平均情况接近O(nlgn)
template<class T>
void swap(T data[], int a, int b){
T temp = data[a];
data[a] = data[b];
data[b] = temp;
}
void quicksort(T data[], int first, int last){
int lower = first+1, upper = last;//双指针
//选择中间的数字放在第一个作为bound
swap(data,first,(first+last)/2);
T bound = data[first];
//双指针移动直到upper在前
while(lower<=upper){
//左指针右移直到指向大于bound的位置
while(data[lower] <= bound)
lower++;
//右指针左移直到指向小于bound的位置
while(data[upper] >= bound)
upper--;
//完成上述移动后,要么左指针在左,需要继续交换移动;要么左指针在右,可以跳出循环开始左右子序列的递归
if(lower<upper){
swap(data,lower,upper);
}
}
//upper指向小于bound的位置,因此交换first和bound作为左右序列的分割
swap(data,first,upper);
if(first<upper-1)
quicksort(data, first,upper-1);
if(upper+1<last)
quicksort(data,upper+1,last);
}
以上是关于快速排序算法的C++实现的主要内容,如果未能解决你的问题,请参考以下文章
在最佳情况下,由于堆栈溢出错误,快速排序算法失败 - C++