void mergeSort(int *arr, int len)
{
int *zone = new int[len];//一次性分配地址空间
mergeSort(arr, zone, 0, len - 1);//递归排序
}
void mergeSort(int *arr, int *zone, int beg, int end)
{
if (end <= beg)//递归终止条件
return;
int mid = beg + (end - beg) / 2;
mergeSort(arr, zone, beg, mid);//对于子数组进行归并排序
mergeSort(arr, zone, mid + 1, end);//对于子数组进行归并排序
//当两个子数组都进行归并排序后,成为两个有序的数组,继续归并排序
for (int i = beg; i <= end; i++)
zone[i] = arr[i];
int i = beg;
int j = mid + 1;
for (int index = beg; index <= end; index++)
{
if (i > mid)
arr[index] = zone[j++];
else if (j > end)
arr[index] = zone[i++];
else if (zone[i] <= zone[j])
arr[index] = zone[i++];
else
arr[index] = zone[j++];
}
}