Cod sursa(job #660862)
#include<stdio.h>
#include<fstream.h>
FILE *f,*g;
int a[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=i+1;
k=k+1;
}
else
{b[k]=a[j];
j=j+1;
k=k+1;}
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;
}
k=1;
for (i=p;i<=q;i++)
{a[i]=b[k];
k=k+1;}
}
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;
f=fopen("algsort.in", "r");
g=fopen("algsort.out", "w");
fscanf(f,"%d", &n);
for (i=1;i<=n;i++)
{ fscanf(f,"%d ",&a[i]);
}
div(1,n,a);
for (i=1;i<=n;i++)
fprintf(g,"%d ", a[i]);
}