Cod sursa(job #832906)

Utilizator vladm97Matei Vlad vladm97 Data 11 decembrie 2012 17:42:11
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream>
#define lheap 500000
using namespace std;
int H[lheap];
int tata(int nod){
	return nod/2;}
int fiu_st(int nod){
	return nod*2;}
int fiu_dr(int nod){
	return nod*2+1;}
void cerne(int n,int nod){
	int fiu;
	do{
		fiu=0;
		if(fiu_st(nod)<=n){
			fiu=fiu_st(nod);
			if((fiu_dr(nod)<=n)&&(H[fiu_dr(nod)])>H[fiu_st(nod)])fiu=fiu_dr(nod);
			if(H[fiu]<=H[nod])fiu=0;
		}
		if(fiu){
			int aux=H[fiu];
			H[fiu]=H[nod];
			H[nod]=aux;}
		nod=fiu;
		}while(fiu);
}
void construire_heap(int n){
	int i;
	for(i=n/2;i>=1;i--)
		cerne(n,i);
}
void heapsort(int n){
	construire_heap(n);
	int i;
	for (i=n;i>=2;i--) {
int aux=H[1];
H[1]=H[i];
H[i]=aux;
cerne(i-1, 1);
}
}
int main()
{int n,i;
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=1;i<=n;i++)
	f>>H[i];
heapsort(n);
for(i=1;i<=n;i++)
	g<<H[i]<<" ";
}