【快速排序算法】C++

快速排序算法

快速排序算法每次处理确定一个元素的最终位置
每次处理确定一个基准元素(一般为第一个元素),将所有比基准元素小的放基准元素前面(无序),将所有比基准元素大的放基准元素后面(无序)。处理v.size()次后数组排序完成。
每次处理步骤如下:

①确定一个基准元素,本步骤以第一个元素为例。
②设置左右指针,分别指向列头和列位。
③右指针从后往前遍历找到一个小于基准元素的值,放入左指针处(基准元素处,正好空缺)。
④左指针从前往后遍历找到一个大于基准元素的值,放入右指针处(右指针已放入基准元素处,正好空缺)。
⑤重复③④步骤,直到左右指针重合
⑥将基准元素放入指针重合处(因为数组数是一定的,最后肯定有一个空位)。
⑦分别快速排序基准元素左部和右部。

C++实现

void quickSort(vector<int>& v, int begin, int end) {
	if (begin >= end) return;
	int	temp = v[begin]; //以左1为基准
	int i = begin;  //从左往右找大的
	int j = end;    //从右往左找小的
	while (i < j) {
		while (i < j && v[j] > temp) j--; //从右往左找小的,
		v[i] = v[j]; //将小的放入右边
		while (i < j && v[i] <= temp) i++; //从左往右找大的
		v[j] = v[i]; //将大的放入左边
	}
	//循环结束时应该 i == j,且在基准的最终位置
	v[i] = temp; //放入基准元素,
	quickSort(v, begin, i - 1); //快速排序左部
	quickSort(v, i + 1, end);   //快速排序右部
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值