1 #include <iostream>
2 using namespace std;
3 void MERGE(int a[],int p,int q,int r);
4 void MERGESORT(int a[],int p,int r);
5
6 void MERGE(int a[],int p,int q,int r)
7 {
8 int n1=q-p+1;
9 int n2=r-q;
10 int L[1000]={0};
11 int R[1000]={0};
12 for(int i=1;i<=n1;i++){
13 L[i]=a[p+i-1];
14 }
15 for(int j=1;j<=n2;j++){
16 R[j]=a[q+j];
17 }
18 int i=1;
19 int j=1;
20 for(int k=p;k<=r;k++){
21 if(i==n1+1&&j==n2+1){
22 break;
23 }
24 else if(i!=n1+1&&j!=n2+1){
25 if(L[i]<=R[j]){
26 a[k]=L[i];
27 i++;
28 }
29 else{
30 a[k]=R[j];
31 j++;
32 }
33 }
34 else if(i==n1+1&&j!=n2+1){
35 a[k]=R[j];
36 j++;
37 }
38 else if(i!=n1+1&&j==n2+1){
39 a[k]=L[i];
40 i++;
41 }
42 }
43 }
44
45 void MERGESORT(int a[],int p,int r)
46 {
47 int q;
48 if(p<r){
49 q=(p+r)/2;
50 MERGESORT(a,p,q);
51 MERGESORT(a,q+1,r);
52 MERGE(a,p,q,r);
53 }
54 }
55
56 int main()
57 {
58 int n;
59 cin>>n;
60 int a[1000]={0};
61 for(int i=1;i<=n;i++){
62 cin>>a[i];
63 }
64 MERGESORT(a,1,n);
65 for(int i=1;i<=n;i++){
66 cout<<a[i]<<" ";
67 }
68 return 0;
69 }