Cod sursa(job #659037)
#include <stdlib.h>
#include <stdio.h>
# define MAX 500001
using namespace std;
int a[MAX],n;
void interclasare(int s,int d,int m)
{ int i,j,k,c[MAX];
i=s;
j=m+1;
k=0;
while(i<=m && j<=d)
if (a[i]<a[j])
{ k++; c[k]=a[i]; i++;}
else
{ k++; c[k]=a[j]; j++;}
if (i<=m )
while (i<=m)
{ k++; c[k]=a[i]; i++;}
else
if (j<=d)
while (j<=d)
{ k++; c[k]=a[j]; j++; }
k=0;
for(i=s;i<=d;i++)
{k++;
a[i]=c[k]; }
}
void divimp(int s,int d)
{ int m;
if (s<d)
{ m=(s+d)/2;
divimp(1,m);
divimp(m+1,d);
interclasare(s,d,m);
}
}
int main()
{int i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf ("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
divimp(1,n);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}