Cod sursa(job #1228901)

Utilizator blasterzMircea Dima blasterz Data 15 septembrie 2014 19:25:04
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#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 = 1; i <= nh / 2; ++i)
        downHeap(i);

    while (nh > 0) {
        printf ("%d ", H[1]);
        swap(1, nh--);
        downHeap(1);
    }
}