#include<iostream>
using namespace std;
/*新增2个数组,数组A存放arr[begin,mid],数组B存放arr[mid+1,end]
并且在数组A和B之后添加一个INF的数字,这样可以避免判断A和B有一个读取完了的情况*/
void Merge(int* arr, int begin, int mid, int end)
{
int n1 = mid - begin + 1;
int n2 = end - mid;
int* A= new int[n1+1];
int* B = new int[n2+1];
for (int i = 0; i < n1; i++)
{
A[i] = arr[begin + i];
}
cout << endl;
for (int i = 0; i < n2; i++)
{
B[i] = arr[mid+1 + i];
}
cout << endl;
A[n1] = 0x7fffffff;
B[n2] = 0x7fffffff;
int index1 = 0;
int index2 = 0;
for (int i = begin; i <= end; i++)
{
if (A[index1] <= B[index2])
{
arr[i] = A[index1];
index1++;
}
else
{
arr[i] = B[index2];
index2++;
}
}
delete[] A;
delete[] B;
}
void MergeSort(int* arr,int begin,int end)
{
if (begin < end)
{
int mid = (begin + end) / 2;
MergeSort(arr, begin, mid);
MergeSort(arr, mid + 1, end);
Merge(arr, begin, mid, end);
}
}
static const int len = 1000;
int main()
{
int arr[len];
for (int i = 0; i < len; i++)
{
arr[i] = len - i;
}
MergeSort(arr, 0, len - 1);
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
程序的运行结果