算法总结——快速排序算法

快速排序

(学习基础,虽然现在的库里都封装好了,但是可以学习基本思想。)

思想:

快速排序就是找一个中枢(正常是第一个),以升序为例将小于中枢的放在数组左边,将大于中枢的放在数组右边。然后左右两边继续递归下去。
快速排序越接近无序效率越高,时间复杂度最好的是O(nlog2n),待排接近有序的最坏的情况是O(log2n),空间复杂度是O(log2n)

伪代码:
void QuickSort(vector<int> &qs, int low, int high) {
	//vector<int>::iterator temp=qs.begin(); //正常将头作为中枢
	
	//vector<int>::iterator i = qs.begin();
	//vector<int>::iterator j = qs.end() - 1;
	//vector<int>::iterator i = low, j = high;
	int i = low, j = high;
	if (i < j) {          //不加会导致越界死循环
		int temp = qs[i];
		while (i < j) {
			//从右边开始检索
			while (j > i && qs[j] > temp) --j; //从右往左直到找到一个比temp小的值
			if (i < j) {
				qs[i] = qs[j];
				++i;
			}
			while (i < j && qs[i] < temp) ++i;
			if (i < j) {
				qs[j] = qs[i];
				--j;
			}
		}
		qs[i] = temp;
		QuickSort(qs, low, i - 1);
		QuickSort(qs, i + 1, high);
	}
}
int main(){
    vector<int> nums = { 4,3,21,5,2,10,7 };
    QuickSort(nums, 0,nums.size()-1);
    for (vector<int>::iterator ii = nums.begin(); ii != nums.end(); ++ii) 
        cout << *ii << endl;
    return 0;
}
总结:

快速排序并不难,但是里面的一些有界性还是要好好看看,另外这边我因为在学stl,所以都希望尝试使用一些没用过的数据结构,还有我这边本来想直接使用迭代器来进行下标比对,但是除了find()我没有找到合适的函数,所以哪位大才看见了,可以教一下我。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值