Cod sursa(job #704936)

Utilizator andreirulzzzUPB-Hulea-Ionescu-Roman andreirulzzz Data 2 martie 2012 22:14:34
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
//heapsort
#include <cstdio>
using namespace std;

int i,j,n,a[500001],nn;

void swap(int &x,int &y);
int max(int x,int y);

int main(){
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	scanf("%d",&n);
	
	for(i=1;i<=n;++i){
		scanf("%d",&a[i]);
		j=i;
		while(a[j]>a[j/2]&j>1) swap(a[j],a[j/2]),j/=2;
		}
	
	nn=n;
	while(n){
		swap(a[n],a[1]);
		--n;
		i=1;
		while((a[i]<a[2*i]||a[i]<a[2*i+1])&&2*i<n){
			j=max(2*i,2*i+1);
			swap(a[i],a[j]);
			i=j;
			}
		}
	
	for(i=1;i<=nn;++i) printf("%d ",a[i]);
	
	printf("\n");
	
	return 0;
}

int max(int x,int y){
	if(y>n) return x;
	if(a[x]>a[y]) return x;
	else return y;
}

void swap(int &x,int &y){
	int aux=x;
	x=y;
	y=aux;
	return;
}