Cod sursa(job #255464)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 9 februarie 2009 20:11:49
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 512000

int H[MAX];
int i, N, hl, x;
inline void swap( int x, int y ) {	int r=H[x]; H[x]=H[y]; H[y]=r; }

void hup( int p ) {
	if ( p==0 ) return;
	int t = (p-1) >> 1;
	if ( H[t] > H[p] ) {
		swap(t, p); 
		hup(t);
	}
}
void hdown( int p ) {
	if ( 2*p+1 > hl ) return;
	if ( 2*p+2 <= hl ) {
		x = (H[2*p+1]<H[2*p+2]) ? 2*p+1 : 2*p+2;
		if ( H[p]>H[x] ) {
			swap(p,x);
			hdown(x);
		}
	} else {
		if ( H[2*p+1] < H[p] ) {
			swap(p, 2*p+1);
			hdown(2*p+1);
		}
	}
}

int main() {
	ifstream in("algsort.in");
	ofstream out("algsort.out");

	in >> N;
	for ( i=0; i<N; ++i ) {
		in >> x;
		H[i] = x;
		hup(i);
	}

	hl = N-1;
	for ( i=0; i<N; ++i ) {
		out << H[0] << " ";
		H[0] = H[hl];
		hdown(0);
		-- hl;
	}
	out << "\n";
	return 0;
}