Cod sursa(job #495600)
#include <stdio.h>
const int maxn=500001;
int i,N;
long int v[maxn];
void merge(int st,int m, int dr)
{
long int aux[m-st+2],i,j,k;
i=1; j=st;
while(j<=m)
aux[i++]=v[j++];
i=1; k=st;
while(j<=dr && k<j)
{
if(aux[i]<=v[j])
v[k++]=aux[i++];
else
v[k++]=v[j++];
}
while(k<j)
v[k++]=aux[i++];
}
void mergesort(int st, int dr)
{
if(st<dr)
{
int m=st+(dr-st)/2;
mergesort(st,m);
mergesort(m+1,dr);
merge(st,m,dr);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++) scanf("%ld ",&v[i]);
mergesort(1,N);
for(i=1;i<=N;i++) printf("%ld ",v[i]);
}