1 #include<iostream>
2 #include<stdio.h>
3 #include<algorithm>
4
5 #define N 10000
6 using namespace std;
7
8 void Merge(int *b,int *a,int i,int m,int n)
9 {
10 int s = i;
11 int j,k;
12 //归并
13 for(j=m+1,k=i;i<=m&&j<=n;k++)
14 {
15 if(b[i]<b[j]) a[k]=b[i++];
16 else a[k]=b[j++];
17 }
18 while(i<=m)
19 a[k++]=b[i++];
20 while(j<=n)
21 a[k++]=b[j++];
22
23 for(j=s;j<=n;j++) //将归并结果再次存入b数组
24 b[j]=a[j];
25 }
26
27 void MergeSort(int * b,int *a,int s,int t)
28 {
29 if(s==t) b[s]=a[s]; //初始化b数组
30 else
31 {
32 int mid = (s+t)>>1;
33 MergeSort(b,a,s,mid);
34 MergeSort(b,a,mid+1,t);
35 Merge(b,a,s,mid,t); //将b数组[s,mid]与[mid+1,t]归并到a中的[s,t]中
36 }
37 }
38
39 int a[N],b[N];
40
41 int main()
42 {
43 int n,i;
44 scanf("%d",&n);
45 for(i=1;i<=n;i++)
46 {
47 scanf("%d",a+i);
48 }
49 MergeSort(b,a,1,n);
50 for(i=1;i<=n;i++)
51 {
52 printf("%d ",a[i]);
53 }
54 putchar(10);
55 return 0;
56 }