Pagini recente » Cod sursa (job #1903047) | Cod sursa (job #2396361) | Cod sursa (job #1378601) | Cod sursa (job #2717337) | Cod sursa (job #1232697)
#include<cstdio>
using namespace std;
int i, n, a[500003];
void swap(int &a, int &b){int aux; aux=a; a=b; b=aux;}
void heap_up(int poz){
if (a[poz/2]>a[poz]) {
swap(a[poz/2], a[poz]);
if (poz/2>1) heap_up(poz/2);
}
}
void heap_down(int poz, int n){
if (2*poz<=n) {
if (2*poz+1<=n) {if ((a[2*poz]<a[poz])||(a[2*poz+1]<a[poz])){
if (a[2*poz]<a[2*poz+1]) {
swap(a[poz], a[2*poz]); heap_down(2*poz, n);
} else {
swap(a[poz], a[2*poz+1]); heap_down(2*poz+1, n);
}}
} else if (a[2*poz]<a[poz]) swap(a[poz], a[2*poz]);
}
}
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]);
heap_up(i);
}
for (i=1;i<=n;i++) {
printf("%d ", a[1]); a[1]=999999999;
swap(a[n-i+1], a[1]);
heap_down(1, n-i);
}
return 0;
}