Cod sursa(job #332875)

Utilizator cvicentiuCiorbaru Vicentiu Marian cvicentiu Data 20 iulie 2009 21:06:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#define MaxN 500001
int n, H[MaxN];
using namespace std;
fstream fin ("algsort.in",ios::in);
fstream fout ("algsort.out",ios::out);
inline int l_fiu(int x){
	return 2*x;
};
inline int r_fiu(int x){
	return 2*x + 1;
};

void swap_it(int &a, int &b){
	int c;
	c = a;
	a = b;
	b = c;
};

void down_heap (int x){
	int fiu;
	do{
		fiu = 0;
		if (l_fiu(x) <= n && H[l_fiu(x)] < H[x])
			fiu = l_fiu(x);
		if (l_fiu(x) < n && H[r_fiu(x)] < H[x] && H[l_fiu(x)] > H[r_fiu(x)] )
			fiu = r_fiu(x);
		
		if (fiu)	swap_it (H[x],H[fiu]);
		x = fiu;
	} while (fiu);
};

		

int main(){
	fin>>n;
	for (int i = 1; i <= n; ++ i )
		fin>>H[i];
	
	for (int i = n/2; i >= 1; -- i)
		down_heap(i);

	for (;n != 0;){
		fout<<H[1]<<' ';
		H[1] = H[n];
		--n;
		down_heap(1);
	};

};