Cod sursa(job #550445)

Utilizator mottyMatei-Dan Epure motty Data 9 martie 2011 16:03:22
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

const int N = 500001;

int n;
int v[N];

void Read()
{
	in >> n;
	
	for (int i = 1; i <= n; ++i)
		in >> v[i];
}

inline void Swap(int a, int b)
{
	v[a] ^= v[b] ^= v[a] ^= v[b];
}

void Sink(int node)
{
	int maxNode = node*2;
	
	if (maxNode > n)
		return;
	
	if (v[maxNode] > v[maxNode+1] && maxNode+1 <= n)
		++maxNode;
	
	if (v[node] > v[maxNode])
	{
		Swap(node, maxNode);
		Sink(maxNode);
	}
}

void BuildHeap()
{
	for (int i = n/2; i; --i)
		Sink(i);
}

void GetOrder()
{
	while(n)
	{
		out << v[1] << " ";
		
		Swap(1, n);
		n--;
		Sink(1);
	}
}

int main()
{
	Read();
	BuildHeap();
	GetOrder();
	
	return 0;
}