Cod sursa(job #371889)

Utilizator xpawnripsterge contu asta xpawnrip Data 7 decembrie 2009 17:58:16
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
using namespace std;

ifstream fin("heap.in");
ofstream fout("heap.out");

int n,h[1000];
void cerne(int);
void promoveaza(int);

void cerne(int k)
{
	int i,eh=0,aux;
	while(k*2<=n && !eh)
	{
		i=2*k;
		if(i+k==n && h[i++]<h[i])
			i=i+1;
		if(h[k]<=h[i])
			eh=1;
		else
		{
			aux=h[k];
			h[k]=h[i];
			h[i]=aux;
			k=i;
		}
	}
}
void promoveaza(int k)
{
	int i,eh=0,aux;
	while(k/2 && !eh)
		if(h[k/2]<=h[k])
		    eh=1;
	else
	{
		aux=h[k];
		h[k]=h[k/2];
		h[k/2]=aux;
		k=k/2;
	}
}

void hs(int nr)
{
	int aux;
	for(;nr>1;)
	{
		aux=h[1];
		h[1]=h[nr];
		h[nr]=aux;
		nr--;
		cerne(1);
	}
}

void read()
{
	n=0;
	fin>>n;
	for(int i=1;i<=n;i++)
	{
		fin>>h[i];
		promoveaza(i);
	}
}
void write()
{
	for(int i=1;i<=n;i++)
		fout<<h[i]<<" ";
}
int main()
{
	read();
	hs(n);
	write();
	fin.close();
	fout.close();
	return 0;
}