Cod sursa(job #957976)

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

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_maxheap()
{
	for (int i=(n>>1);i>=1;--i)
		max_heapify(i);
}
void heapsort()
{
	build_maxheap();
	while (n!=0)
	{
		swap(h[1],h[n]);
		--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<<'\n';
	fout.close();
}
int main()
{
	citire();
	heapsort();
	afisare();
	return 0;
}