Cod sursa(job #771659)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 26 iulie 2012 19:23:01
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
using namespace std;

int v[500010],n,i,aux;

void up(int i) {
	//urca in heap elementul de pe poz i a heapului
	int c = i;
	int p = c/2;
	while (p!=0) {
		if (v[c] > v[p]) {
			aux = v[c];
			v[c] = v[p];
			v[p] = aux;
			c = p;
			p = c/2;
		} else
			break;
		
	}
}

void down(int i, int H) {
	int p = i;
	int c = 2*p;
	while (c<=H) {
		if (c+1 <= H && v[c+1] > v[c])
			c++;
		if (v[p] < v[c]) {
			aux = v[c];
			v[c] = v[p];
			v[p] = aux;
			p = c;
			c = 2*p;
		} else break;
	}
}


int main() {
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f>>n;
	for (i=1;i<=n;i++)
		f>>v[i];
	// transform v in heap (max)
	for (i=2;i<=n;i++)
		up(i);
	
	for (i=n;i>=2;i--) {
		aux = v[1];
		v[1] = v[i];
		v[i] = aux;
		down(1,i-1);
	}
	
	for(i=1;i<=n;i++)
		g<<v[i]<<" ";
	return 0;
}