Pagini recente » Cod sursa (job #125316) | Cod sursa (job #2229420) | Cod sursa (job #915348) | Cod sursa (job #2125904) | Cod sursa (job #590388)
Cod sursa(job #590388)
#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;
}