Cod sursa(job #590388)

Utilizator nicknameLare Nicu nickname Data 17 mai 2011 10:34:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <algorithm>
#include <stdio.h>

using namespace std;

int Parent(int i){
	return i/2;
}

int Left(int i){
	return 2*i;
}

int Right(int i){
	return 2*i+1;
}

void MaxHeapify(int *a,int n,int i){
	int l=Left(i);
	int r=Right(i);
	int max=i;
	if (l <= n && a[l] > a[max])
		max=l;
	if (r <= n && a[r] > a[max])
		max=r;
	if (i != max){
		swap(a[i],a[max]);
		MaxHeapify(a,n,max);
	}
}

void BuildMaxHeap(int *a, int n){
	for (int i=n/2; i>=1; --i)
		MaxHeapify(a,n,i);
}

int main(){
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	int a[500001],n;
	scanf("%d",&n);
	for (int i=1; i<=n; ++i)
		scanf("%d",a+i);
	int n1=n;
	BuildMaxHeap(a,n);
	for (int i=n1; i>=2; --i){
		swap(a[1],a[i]);
		n1--;
		MaxHeapify(a,n1,1);	
	}
	for (int i=1; i<=n; ++i)
		printf("%d ",a[i]);
	return 0;
}