#include<iostream>
using namespace std ;
void MergeSort(int *a,int ns,int ne){
if(ne-ns==1)return ;
int m=ns+(ne-ns)/2;
MergeSort(a,ns,m);
MergeSort(a,m,ne);
int *ta=new int[ne-ns];
int nt=0;
int nl=ns,nr=m;
for(;;){
if(nl>=m || nr>=ne) break;
if(a[nl]<a[nr]) {ta[nt]=a[nl];nl++;nt++;}
else {ta[nt]=a[nr];nt++;nr++;}
}
while(nl<m)
ta[nt++]=a[nl++];
while(nr<ne)
ta[nt++]=a[nr++];
for(int i=0;i<ne-ns;i++)
a[i+ns]=ta[i] ;
delete[] ta;
}
void print(int a[],int n){
for(int i=0;i<n;i++)
printf("%d ",a[i]) ;
}
int main()
{
int a[]={4,1,10,15,37,79,24,11,91,2,18,94,45,21,52,83,98,90};
int n=sizeof(a)/sizeof(*a);
MergeSort(a,0,n);
print(a,n);
return 0;
}