#include<stdio.h>
void sort(int *arr,int s,int e);
void merge(int *arr,int s,int m,int e);
int main()
{
int n,arr[100]={0};
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&arr[i]);
sort(arr,1,n);
for(int i=1;i<=n;i++)
printf("%d ",arr[i]);
return 0;
}
void sort(int *arr,int s,int e)
{
int m;
if(s<e)
{
m=(s+e)/2;//分成两段
sort(arr,s,m);
sort(arr,m+1,e);
merge(arr,s,m,e);
}
}
void merge(int *arr,int s,int m,int e)
{
int l[m-s+2];//左边,因为所有i从1开始,m-s+1再要加1
int r[e-m+1];//右边
for(int i=1;i<=m-s+1;i++)
l[i]=arr[s+i-1];//不用多余参数表示arr下标
for(int i=1;i<=e-m;i++)
r[i]=arr[m+i];
int i=1,j=1,k=s;
while(i<=(m-s+1)&&j<=(e-m))
{
if(l[i]<=r[j])//判断两个数组的元素大小
arr[k++]=l[i++];
else
arr[k++]=r[j++];
}
while(i<=(m-s+1))//排除某一个数组没有处理完
arr[k++]=l[i++];
while(j<=(e-m))
arr[k++]=r[j++];
}