Pagini recente » Cod sursa (job #1358565) | Cod sursa (job #1170696) | Cod sursa (job #2978835) | Cod sursa (job #1707609) | Cod sursa (job #1228908)
#include <cstdio>
#define N 500001
int H[N], nh;
inline void swap(int i, int j) {
int t = H[i];
H[i] = H[j];
H[j] = t;
}
inline void upHeap(int i) {
if (i <= 1) return;
if (H[i] < H[i / 2])
swap(i, i / 2),
upHeap(i / 2);
}
inline void downHeap(int i) {
int m = i;
if (2 * i <= nh && H[2 * i] < H[m])
m = 2 * i;
if (2 * i + 1 <= nh && H[2 * i + 1] < H[m])
m = 2 * i + 1;
if (m != i)
swap(i, m),
downHeap(m);
}
int n;
int main() {
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
scanf ("%d\n", &n);
int i;
for (i = 1; i <= n; ++i) {
scanf ("%d ", &H[i]);
}
nh = n;
for (i = nh / 2; i > 0; --i)
downHeap(i);
while (nh > 0) {
printf ("%d ", H[1]);
swap(1, nh--);
downHeap(1);
}
}