算法-排序

本文详细介绍了快速排序算法,包括其递归思想、关键步骤(如选择标志数据、左右指针操作)以及merge函数的实现。通过代码示例展示了如何按从小到大顺序排列数组。
摘要由CSDN通过智能技术生成

排序算法总结

一、快速排序

1.1 思想(递归)

函数merge(vector& array, int beginIndex, int endIndex)的功能是将数组array从beginIndex到endIndex按从小到大排列

第一步:找一个标志数据(一般为array[beginIndex])

第二步:对array重新排列,将array中小于标志数据的放标志数据左边,大于的放右边,假设排列后标志数据的下标为flagIndex(重点)

​ 初始三个索引flagIndex = beginIndex、leftIndex = beginIndex+1、rightIndex = endIndex

​ 扫描除了标志数据的其他所有数据(leftIndex ~rightIndex )(while(leftIndex <= rightIndex))

​ 如果flagIndex 在(leftIndex ~rightIndex)的左侧,则判断rightIndex的值是否大于flagIndex 的值,如果非:将rightIndex的值放在flagIndex 的位置,flagIndex 更新为rightIndex;rightIndex–;

​ 如果flagIndex 在(leftIndex ~rightIndex)的右侧,则判断leftIndex的值是否小于flagIndex 的值,如果非:将leftIndex的值放在flagIndex 的位置,flagIndex 更新为leftIndex;leftIndex++;

第三步:f(array,0,array.size - 1) = f(array,0,flagIndex-1) + f(array,flagIndex+1,array.size-1)

1.2 代码
void merge(vector<int>& array, int beginIndex, int endIndex) {
	//1 判断结束条件
	if (beginIndex > endIndex) return;
	if (beginIndex == endIndex) return;
	//2 重新排序
	else {
		int b = beginIndex + 1, e = endIndex, flagIndex = beginIndex,flag = array[beginIndex];
		while (b <= e) {
			if (flagIndex < b) {
				if (array[e] < flag) {
					array[flagIndex] = array[e];
					flagIndex = e;
				}
				e--;
			}
			else {
				if (array[b] > flag) {
					array[flagIndex] = array[b];
					flagIndex = b;
				}
				b++;
			}
		}
		array[flagIndex] = flag;
		//3 递归求解
		merge(array, beginIndex, flagIndex - 1);
		merge(array, flagIndex + 1, endIndex);
	}
}
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值