【程序】
#include <stdio.h>
void Merge(int b[],int p,int c[],int q,int a[])
{
int i,j,k;
i=j=k=0;
while(j<p&&k<q)
{
if(b[j]<=c[k])
a[i++]=b[j++];
else
a[i++]=c[k++];
}
if(j==p)
while(k<q)
a[i++]=c[k++];
else
while(j<p)
a[i++]=b[j++];
}
void Mergesort(int a[],int n)
{
int b[n],c[n],i,j,k;
j=k=0;
if(n>1)
{
for(i=0;i<=n/2-1;i++) //前半部分复制到 b 数组中
b[j++]=a[i];
for(i=n/2;i<=n-1;i++) //后半部分复制到 c 数组中
c[k++]=a[i];
Mergesort(b,n/2);
Mergesort(c,n-n/2);
Merge(b,n/2,c,n-n/2,a);
}
}
int main()
{
int n,a[100],i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
Mergesort(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}