Cod sursa(job #363016)

Utilizator bog29Antohi Bogdan bog29 Data 11 noiembrie 2009 15:41:51
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#define dmax 500003
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n;
typedef long long heap[dmax];
heap h;
int left_son(int k)
{	return 2*k;
}
int right_son(int k)
{	return 2*k+1;
}
void swap(long long &a,long long &b)
{	long long p;
	p=a;
	a=b;
	b=p;
}
void sift(int n,int k)
{	int son;
	do{
	son=0;
	if(left_son(k)<=n)
	{	son=left_son(k);
		if(right_son(k)<=n && h[right_son(k)]>h[son])
			son=right_son(k);
		if(h[son]<h[k])
			son=0;
	}
	if(son)
	{	swap(h[son],h[k]);
		k=son;
	}	
	}while(son);
}
void bh(int m)
{	int i;
	for(i=m/2;i>=1;i--)
		sift(m,i);
}
int main()
{	int i;
	in>>n;
	for(i=1;i<=n;i++)
		in>>h[i];
	in.close();
	bh(n);
	for(i=n;i>1;i--)
	{	swap(h[i],h[1]);
		sift(i-1,1);
	}
	for(i=1;i<=n;i++)
		out<<h[i]<<" ";
	out.close();
	return 0;
}