Cod sursa(job #957881)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 6 iunie 2013 12:03:52
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
const int MAXN=500010;
int n,heapsize;
int h[MAXN];


inline int parent(int i){return (i>>1);}
inline int left(int i){return (i<<1);}
inline int right(int i){return (i<<1)+1;}

void max_heapify(int i)
{
	int l=left(i),r=right(i),largest=i;
	if (l<=n && h[l]>h[largest])
		largest=l;
	if (r<=n && h[r]>h[largest])
		largest=r;
	if (largest!=i)
	{
		swap(h[i],h[largest]);
		max_heapify(largest);
	}
}

void build_max_heap()
{
	for (int i=1;i<=((n>>1)+1);++i)
		max_heapify(i);
}
void heapsort()
{
	build_max_heap();
	while (n!=0)
	{
		swap(h[n],h[1]);
		--n;
		max_heapify(1);
	}
}
void citire()
{
	ifstream fin("algsort.in");
	fin>>n;	heapsize=n;
	for (int i=1;i<=n;++i)
		fin>>h[i];
	fin.close();
}
void afisare()
{
	ofstream fout("algsort.out");
	for (int i=1;i<=heapsize;++i)
		fout<<h[i]<<' ';
	fout.close();
}
int main()
{
	citire();
	heapsort();
	afisare();
	return 0;
}