Cod sursa(job #2388856)

Utilizator MateiTrandafirMatei Trandafir MateiTrandafir Data 26 martie 2019 16:46:07
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

int h[500001], n;

inline void percolate(int p) {
    while (p > 1 && h[p / 2] < h[p]) {
        std::swap(h[p / 2], h[p]);
        p /= 2;
    }
}

inline void sift(int p) {
    int s1, s2;
    do {
        s1 = 2 * p, s2 = 2 * p + 1;
        if (s1 == n) {
            if (h[s1] < h[p]) std::swap(h[s1], h[p]);
            p = n;
        } else if (s1 < n) {
            if (h[s2] < h[s1]) std::swap(s1, s2);
            if (h[s1] < h[p]) {
                std::swap(h[s1], h[p]);
                p = s1;
            } else p = n;
        } else p = n;
    } while (p < n);
}

int main() {
    std::ifstream in("algsort.in");
    std::ofstream out("algsort.out");
    int i;
    in >> n;
    for (i = 1; i <= n; ++i) in >> h[i];
    for (i = n; i >= 1; --i) sift(i);
    while (n > 0) {
        out << h[1] << ' ';
        h[1] = h[n];
        --n;
        sift(1);
    }
    return 0;
}