#include<stdio.h>
#include<limits.h>
void Merge(int arr[],int p,int q,int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int Left[n1+1];
int Right[n2+1];
for(int i=0; i<n1; i++)
{
Left[i] = arr[p+i];
}
for(int j=0; j<n2; j++)
{
Right[j] = arr[q + j +1];
}
Left[n1]=INT_MAX;//哨兵,设为一个大数
Right[n2]=INT_MAX;
for(int i=0,j=0,k=p; k<=r;k++)
{
if(Left[i] <= Right[j])
{
arr[k] = Left[i];
i++;
}else{
arr[k]=Right[j];
j++;
}
}
}
void MergeSort(int arr[],int p,int r)
{
if(p<r)
{
int q = (p+r)/2;
MergeSort(arr, p, q);
MergeSort(arr, q+1, r);
Merge(arr,p,q,r);
}
}
int main()
{
int len =0;
printf("输入要排序的数组长: ");
scanf("%d",&len);
int arr[len];
printf("请输入 %d 个数\n",len);
for(int i=0; i<len; i++)
{
scanf("%d",&arr[i]);
}
MergeSort(arr, 0, len-1);
for(int i=0; i<len; i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
return 0;
}