#include <stdio.h>
#include <limits.h>
#include <malloc.h>
int a[10]={2,8,5,7,4,3,1,9,6,10};
void merge(int *m, int x, int y, int z)
{
int b1,b2,i,j,k;
b1=y-x+1;
b2=z-y;
int *tm1=(int*)malloc(sizeof(int)*(b1+1));
int *tm2=(int*)malloc(sizeof(int)*(b2+1));
for(i=0;i<b1;i++)
tm1[i]=m[i+x];
for(j=0;j<b2;j++)
tm2[j]=m[j+y+1];
tm1[i]=tm2[j]=INT_MAX;
for(k=x,i=0,j=0;k<=z;k++)
{
if (tm1[i]<tm2[j])
{
m[k]=tm1[i];
i++;
}
else
{
m[k]=tm2[j];
j++;
}
}
free(tm1);
free(tm2);
}
void MergeSort(int *m,int n1, int n2)
{
if(n1<n2)
{
int n=(n1+n2)/2;
MergeSort(m,n1,n);
MergeSort(m,n+1,n2);
merge(m,n1,n,n2);
for(int t=0;t<10;t++)
printf("%d ",m[t]);
printf("\n");
}
}
int main()
{
int i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n排序后\n");
MergeSort(a,0,9);
printf("\n最终结果\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
运行结果