Cod sursa(job #469141)

Utilizator alisssiaMititelu Andra alisssia Data 6 iulie 2010 15:33:18
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
using namespace std;
#include<cstdio>
long k,h[500001];

void downheap(long i)
{
	long fiu=2*i,aux;
	while(fiu<=k)
	{
		if(fiu<k && h[fiu+1]>h[fiu]) fiu++;
		if(h[fiu]>h[i]) 
		{
			aux=h[fiu];
			h[fiu]=h[i];
			h[i]=aux;
			i=fiu;
			fiu=fiu*2;
		}
		else fiu=k+1;
	}
}

void upheap(long i)
{
	long tata=i/2,aux;
	while(tata && h[tata]<h[i])
	{
		aux=h[tata];
		h[tata]=h[i];
		h[i]=aux;
		i=tata;
		tata=tata/2;
	}
}

int main()
{
	long i,n,aux;
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	scanf("%li",&n);
	for(i=0;i<n;i++)
	{
		scanf("%li",&h[++k]);
		upheap(k);
	}
	while(k>1)
	{
		aux=h[1];
		h[1]=h[k];
		h[k]=aux;
		k--;
		downheap(1);
	}
	for(i=1;i<=n;i++)
		printf("%li ",h[i]);
	return 0;
}