C++归并排序

C++归并排序

算法概述
归并排序是将有序的两个数组进行排序,即将待排序的一个数组不断进行递归,直到递归成两个都只含有一个元素的数组,则对这两个之含有一个元素的数组进行排序,不断回溯,直到回溯到可以将待排序数组分成两个有序数组,之后对其进行最后一次有序数组排序,最后两个有序数组合并为一个有序数组,就得到了需要进行排序的数组,可以从小到大进行排序,也可以从大到小进行排序。

代码

void mergeSort(vector<int>& nums, vector<int>& path, int left, int right)
{
//1.递归返回条件
	if(left >= right){
		return;
	}
	int mid = (left + right) / 2;
//2.进行左右数组递归
	mergeSort(nums, path, left, mid);//对左边数组进行递归
	mergeSort(nums, path, mid + 1, right);//对右边数组进行递归
//3.每个递归中需要进行的动作,即对两个有序的数组进行合并排序	
	int l = left;//第一个数组的起始位置
	int r = mid + 1;//第二个数组的起始位置
	
	for(int ix = left; ix <= right; ++ix)
	{
		path[ix] = nums[ix];
	}
	for(int ix = left; ix <= right; ++ix){
		if(ix == mid + 1){
			nums[ix] = path[ix];
		}else if(ix == right + 1 || path[left] <= path[right]){
			nums[ix] = path[left++];
		}else{
			nums[ix] = path[right++];
		}
	}
}

时间复杂度:O(nlog n);
空间复杂度:O(n);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值