快速排序算法的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++

快速排序-递归实现

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

内部排序算法总结(上)C++实现

算法笔记 排序算法完整介绍及C++代码实现 HERODING的算法之路

排序算法的c++实现——快速排序