Cod sursa(job #590387)

Utilizator nicknameLare Nicu nickname Data 17 mai 2011 10:31:27
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#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;
	cin>>n;
	for (int i=1; i<=n; ++i)
		cin>>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)
		cout<<a[i]<<" ";
	cout<<"\n";
	return 0;
}