Cod sursa(job #360227)

Utilizator spidyvenomMarius Toma spidyvenom Data 30 octombrie 2009 17:43:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream.h>
ifstream f("algsort.in");
ofstream g("algsort.out");

unsigned long i,n,h[500001];

unsigned long poz_max(unsigned long i,unsigned long n)
{if (2*i+1<=n)
	if (h[2*i]>h[2*i+1]) return 2*i;
	else return 2*i+1;
 else return 2*i;}

void schimb (unsigned long &i,unsigned long &j)
{int aux=i;i=j;j=aux;}

void divide (unsigned long i,unsigned long n)
{if (i<=n/2)
	{int k=poz_max(i,n);
	 if (h[k]>h[i])
		{schimb (h[k],h[i]);
		 divide (k,n);}
	 }
}

void heap ()
{for (unsigned long i=n/2;i>=1;i--)
	divide(i,n);
}

void heapsort()
{
unsigned long i;
heap();
for(i=n;i>1;i--)
	{
	schimb(h[1],h[i]);
	divide(1,i-1);
	}
}

int main()
{
f>>n;
for(i=1;i<=n;i++)
	f>>h[i];
heapsort();
for(i=1;i<=n;i++)
	g<<h[i]<<" ";
return 0;
}