#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int b[100],c[100];//中间数组
void MERCE(int a[],int p,int q,int r)//合并左右两个数组
{
for(int i = p;i <= q;i++){
b[i] = a[i];
}
for(int i = q + 1;i <= r;i++){
c[i] = a[i];
}
int x = p,y = p,z = q + 1;
while(x <= r && y <= q && z <= r){
if(b[y] > c[z]){
a[x++] = c[z];
z++;
}
else{
a[x++] = b[y];
y++;
}
}
if(x != r + 1){
if(y != q + 1){
while(y <= q){
a[x++] = b[y];
y++;
}
}
else{
while(z <= r){
a[x++] = c[z];
z++;
}
}
}
}
void MERCE_SORT(int a[],int p,int r)//O(nlgn)
{
if(p >= r){
return ;
}
int q = (p + r) / 2;
MERCE_SORT(a,p,q);
MERCE_SORT(a,q + 1,r);
MERCE(a,p,q,r);
}
int main()
{
int a[6] = {5,2,4,6,1,3};
MERCE_SORT(a,0,5);
for(int i = 0;i < 6;i++){
printf("%d\n",a[i]);
}
return 0;
}