Cod sursa(job #360222)

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

int i,n,h[100];

int poz_max(int i,int 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 (int &i,int &j)
{int aux=i;i=j;j=aux;}

void divide (int i,int 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 (int i=n/2;i>=1;i--)
	divide(i,n);
}

void heapsort()
{
int 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;
}