Cod sursa(job #340454)

Utilizator szabotamasSzabo Tamas szabotamas Data 14 august 2009 18:19:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>

#define MAX 500002

using namespace std;

long v[MAX],x,n,i,q,nn;

void swapp(long &a,long &b){
	long xx;
	xx=a;
	a=b;
	b=xx;
}

void up(long i){
	while(v[i]>v[i/2] && i>1){
		swapp(v[i],v[i/2]);
		i=i/2;
	}
}

void down(long i){
	long k;
    short int ok=0;
	while (i<=n){
		if (i*2<=n && v[i]<v[i*2]){
			k=i*2;
			ok=1;
		}
		if (i*2+1<=n && v[i*2]<v[i*2+1] && v[i]<v[i*2+1]){
			k=i*2+1;
			ok=1;
		}
		if (ok){
			swapp(v[k],v[i]);
			i=k;
			ok=0;
		}
		else{
			return;
		}
	}
}

void buildheap(){
	for (i=n/2; i>0; i--){
		down(i);
	}
}

int main(){
	ifstream fin("algsort.in");
	ofstream fout("algsort.out");
	fin >> n;
	nn=n;
	for (q=1; q<=n; q++){
		fin >> v[q];
	}
	buildheap();
	while(n>1){
		x=v[1];
		v[1]=v[n];
		down(1);
		v[n]=x;
		n--;
	}
	for (q=1; q<=nn; q++){
		fout << v[q] << " ";
	}
	return 0;
}