#include<iostream>
usingnamespace std;
void Merge(int *array, intlow, intmiddle, inthigh) //合并
{
int *A = newint[high - low + 1]; //临时数组,存储个数为high - low + 1个数据
int i = low;
int j = middle + 1;
int k = 0;
while (i <= middle && j <= high) //直至前半部或后半部数据完全录入暂存
{
if (array[i] < array[j]) //如果前半部的数据小于后半部的,前半部数据暂存
A[k++]= array[i++];
else //否则后半部数据暂存,并下标自加
A[k++]= array[j++];
}
while (i <= middle) //保证前半部数据录入暂存
A[k++]= array[i++];
while (j <= high) //保证后半部数据录入暂存
A[k++]= array[j++];
for (i = low; i <= high; i++) //将暂存的数据重新填充至array[low]--array[high]中
array[i] = A[i - low];
}
void MergeSort(int *array, intlow, inthigh)
{
int middle; //分割问题
if (low < high)
{
middle= (low + high) / 2; //分割问题
MergeSort(array, low, middle); //前半部
MergeSort(array, middle + 1, high); //后半部
Merge(array, low, middle, high); //合并
}
}
int main()
{
int n;
cout<<"输入需要排列数据的个数:";
cin >> n; //录入需要排列的个数
int *array = newint[n];
cout<< endl <<"请输入数据:"<< endl;
for (int i = 0; i < n;i++)
cin>> array[i]; //录入未排序的数据
MergeSort(array,0, n - 1); //进行排序
cout<<"排列后数据:"<< endl;
for (int j = 0; j < n;j++) //输出排列结果
cout<< array[j] <<" ";
cout<< endl;
system("pause");
return 0;
}