http://www.cnblogs.com/jillzhang/archive/2007/09/16/894936.html
#include<stdio.h>
#define MAX_NUM 100
int num[MAX_NUM];
int result[MAX_NUM];
void MergeSort(int num[],int result[],int i,int m,int n)
{
int j, k;
for (j=m+1,k=i;i<=m&&j<=n;k++)
{
if (num[i]>num[j]) result[k]=num[i++];
else result[k]=num[j++];
}
while(i<=m) result[k++]=num[i++];
while(j<=n) result[k++]=num[j++];
}
void MSort(int num[],int result[],int s,int t)
{
int m,mid[MAX_NUM];
if (s==t) result[s]=num[s];
else
{
m=(s+t)/2;
MSort(num,mid,s,m);
MSort(num,mid,m+1,t);
MergeSort(mid,result,s,m,t);
}
}
int main()
{
int i,j,mm;
while (scanf("%d",&mm)!=EOF)
{
for(i=1;i<=mm;i++)
scanf("%d",&num[i]);
MSort(num,num,1,mm);
for (j=1;j<=mm;j++)
{
printf("%d ", num[j]);
}
printf("\n");
}
return 0;
}