Cod sursa(job #288126)

Utilizator spidyvenomMarius Toma spidyvenom Data 25 martie 2009 16:19:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<fstream.h>
int n;
long a[500001];
ifstream f("algsort.in");
ofstream g("algsort.out");
void merge(int st,int dr,int m)
{
int b[500001],k=0,i=st,j=m+1;
while (i<=m && j<=dr)
	if (a[i]<=a[j]) b[++k]=a[i++];
	else b[++k]=a[j++];
if (i<=m)
	for (j=i;j<=m;j++) b[++k]=a[j];
else
	for (i=j;i<=dr;i++) b[++k]=a[i];
k=1;
for (i=st;i<=dr;i++) a[i]=b[k++];
}
void divide(int st,int dr)
{
int m,aux;
if ((dr-st)<=1)
	{
	if (a[st]>a[dr])
		{
		aux=a[st];
		a[st]=a[dr];
		a[dr]=aux;
		}
	}
else
	{
	m=(st+dr)/2;
	divide(st,m);
	divide(m+1,dr);
	merge(st,dr,m);
	}
}

int main()
{
int i;
f>>n;
for (i=1;i<=n;i++) f>>a[i];
divide(1,n);
for (i=1;i<=n;i++) g<<a[i]<<" ";
g.close();
return 0;
}