版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/84452231
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <string>
const int maxn=500000,INF=0x3f3f3f3f;
int L[maxn/2+2],R[maxn/2+2],a[maxn];
void merge(int a[],int left,int mid,int right)
{
int n1=mid-left,n2=right-mid;
for(int i=0;i<n1;i++)
L[i]=a[left+i];
for(int i=0;i<n2;i++)
R[i]=a[mid+i];
L[n1]=R[n2]=INF;
int i=0,j=0;
for(int k=left;k<right;k++)
{
if(L[i]<=R[j])
{
count++;
a[k]=L[i++];
}
else
{
count++;
a[k]=R[j++];
}
}
}
void mergesort(int a[],int left,int right)
{
if(left+1<right)
{
int mid=(left+right)/2;
mergesort(a,left,mid);
mergesort(a,mid,right);
merge(a,left,mid,right);
}
}
int main ()
{
int len,i;
while(scanf("%d",&len)!=EOF)
{
for(i=0;i<len;i++)
scanf("%d",&a[i]);
mergesort(a,0,len);
for(int i=0;i<len;i++)
{
if(i!=len-1)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);
}
}
return 0;
}