归并排序

题目:基于数组的归并排序

思路:先将数组递归进行分解,一直到只有一个元素为止,之后再递归的合并分解的数组

代码:

//归并排序
void Merge(int* arr,int start,int mid,int end)
{
	int nCurLeft = start;
	int nCurLeftEnd = mid;
	int nCurRight = mid + 1;
	int nCurRightEnd = end;

	int* nTemp = new int[end-start+1];

	int nCur = 0;

	while ((nCurLeft <= nCurLeftEnd) && (nCurRight <= nCurRightEnd))
	{
		if (arr[nCurLeft] <= arr[nCurRight])
		{
			nTemp[nCur] = arr[nCurLeft];
			nCur++;
			nCurLeft++;
		}
		else
		{
			nTemp[nCur] = arr[nCurRight];
			nCur++;
			nCurRight++;
		}
	}

	while (nCurLeft <= nCurLeftEnd)
	{
		nTemp[nCur] = arr[nCurLeft];
		nCur++;
		nCurLeft++;
	}

	while (nCurRight <= nCurRightEnd)
	{
		nTemp[nCur] = arr[nCurRight];
		nCur++;
		nCurRight++;
	}

	for (int i = 0; i < nCur; ++i)
	{
		arr[start+i] = nTemp[i];
	}

	delete[] nTemp;
}


void MergeSort(int* arr,int start,int end)
{
	if (start >= end)
	{
		return;
	}

	int mid = (start+end)>>1;
	MergeSort(arr,start,mid);
	MergeSort(arr,mid+1,end);
	Merge(arr,start,mid,end);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值