Cod sursa(job #373653)

Utilizator c912046Mihaila Stefan c912046 Data 14 decembrie 2009 17:53:15
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <algorithm>

unsigned int H[500000], heapsize;

inline unsigned int LEFT (unsigned int idx) { return (idx<<1)+1; }
inline unsigned int RIGHT (unsigned int idx) { return (idx<<1)+2; }
inline unsigned int PARENT (unsigned int idx) { return (idx-1)>>1; }

void heapify (unsigned int idx)
{
	unsigned int idx2;
	while (LEFT(idx) < heapsize) {
		idx2=idx;
		if (H[LEFT(idx)] > H[idx2]) idx2 = LEFT(idx);
		if (RIGHT(idx) < heapsize && H[RIGHT(idx)] > H[idx2]) idx2 = RIGHT(idx);
		if (idx2 != idx) { std::swap(H[idx], H[idx2]); idx = idx2; }
		else break;
	}
}

void make_heap ()
{
	for (unsigned int i=0; LEFT(i) < heapsize; ++i) heapify(i);
}

int main ()
{
	unsigned int N, i;
	std::ifstream fin("algsort.in");
	std::ofstream fout("algsort.out");
	
	for (i=0; i<N; ++i) fin >> H[i];
	make_heap();
	while (heapsize) { std::swap(H[0], H[--heapsize]); heapify(0); }
	for (i=0; i<N; ++i) fout << H[i] << ' ';
	fout << '\n';
	return 0;
}