Cod sursa(job #660903)
#include<stdio.h>
int a[500001],b[500001],n;
void sort(int p, int q, int a[500001])
{ int m;
if (a[p]>a[q]) {
m=a[p];
a[p]=a[q];
a[q]=m;}
}
void intercl(int p, int q, int m, int a[500001])
{ int b[500001], i,j,k;
i=p; j=m+1; k=1;
while (i<=m && j<=q)
if (a[i]<=a[j])
{b[k]=a[i];
i++;
k++;
}
else
{b[k]=a[j];
j++;
k++;}
if (i<=m)
for (j=i;j<=m;j++)
{b[k]=a[j];
k=k+1;}
else
for (i=j;i<=q;i++)
{b[k]=a[i];
k++;
}
k=1;
for (i=p;i<=q;i++)
{a[i]=b[k];
k++;}
}
void div (int p, int q, int a[500001])
{int m;
if ((q-p)<=1) sort (p,q,a);
else
{m=(p+q)/2;
div(p,m,a);
div(m+1,q,a);
intercl(p,q,m,a); }
}
int main()
{int i;
FILE* f=fopen("algsort.in", "r");
fscanf(f,"%d\n", &n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&a[i]);
fclose(f);
div(1,n,a);
FILE* g=fopen("algsort.out", "w+");
for (i=1;i<=n;i++)
fprintf(g,"%d ", a[i]);
fprintf(g,"\n");
fclose(g);
return 0;
}