题目:基于数组的归并排序
思路:先将数组递归进行分解,一直到只有一个元素为止,之后再递归的合并分解的数组
代码:
//归并排序
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);
}