Pagini recente » Cod sursa (job #2798350) | Cod sursa (job #3159720) | Cod sursa (job #1251579) | Cod sursa (job #322282) | Cod sursa (job #332870)
Cod sursa(job #332870)
#include <stdio.h>
#define MaxN 500001
int n, H[MaxN];
inline int l_fiu(int x){
return 2*x;
};
inline int r_fiu(int x){
return 2*x + 1;
};
void swap_it(int &a, int &b){
int c;
c = a;
a = b;
b = c;
};
void down_heap (int x){
int fiu;
do{
fiu = 0;
if (l_fiu(x) <= n && H[l_fiu(x)] < H[x])
fiu = l_fiu(x);
if (l_fiu(x) < n && H[r_fiu(x)] < H[x] && H[l_fiu(x)] > H[r_fiu(x)] )
fiu = r_fiu(x);
if (fiu) swap_it (H[x],H[fiu]);
x = fiu;
} while (fiu);
};
int main(){
freopen ("algsort.in","r",stdin);
freopen ("algsort.out","w",stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++ i )
scanf("%d", &H[i]);
for (int i = n/2; i >= 1; -- i)
down_heap(i);
for (;n != 0;){
printf("%d ", H[1]);
H[1] = H[n];
--n;
down_heap(1);
};
};