#include<cstdio>
int a[100005],t[100005],n;
void mergesort(int l,int r);
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
mergesort(1,n);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
void mergesort(int l,int r)
{
if(l==r) return;
int mid=(l+r)/2;
mergesort(l,mid);
mergesort(mid+1,r);
int p=l,q=mid+1,i=l;
while(p<=mid&&q<=r)
{
if(a[p]<a[q])
t[i]=a[p],i++,p++;
else
t[i]=a[q],i++,q++;
}
while(p<=mid) t[i++]=a[p++];
while(q<=r) t[i++]=a[q++];
for(int i=l;i<=r;i++)
a[i]=t[i];
}
可以证明,归并排序的时间复杂度也为O(nlogn)