归并排序

//自顶向下的归并排序
void mergeSort(std::vector<int>& V, int lo, int hi)
{
	if (hi <= lo)
		return;
	int mid = lo + (hi - lo) / 2;
	mergeSort(V, lo, mid);			//递归实现数组的切分
	mergeSort(V, mid + 1, hi);
	merge(V, lo, hi);
}
//数组自身实现排序
void merge(std::vector<int> &V, int lo, int hi)
{
	//将v_copy数组"抽象"地分为两段
	int mid = lo + (hi - lo) / 2;
	int i = lo;
	int j = mid + 1;
	std::vector<int> v_copy(V);

	//记得每次v_copy中遍历元素后,索引i,j要++;
	for (int k = lo; k <= hi; ++k) {
		if (i > mid)
			V[k] = v_copy[j++];		//如果i>mid,表示前段数组已经在v_copy取完了
									//现在只要把后段数组的元素放入V即可
		else if (j > hi)
			V[k] = v_copy[i++];		//当j>hi,理由同上

		else if (v_copy[i] < v_copy[j])
			V[k] = v_copy[i++];		//此时,前段数组和后段数组还有元素
		else
			V[k] = v_copy[j++];		//将较小元素放入V
	}
}

自顶向下的归并排序

归并排序是一种递归算法,运用了高效的分治思想。

实现部分的细节均在代码中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值