Cod sursa(job #1385042)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 11 martie 2015 17:26:43
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int n, v[500010];

inline void hip (int i)
{
    if (2 * i > n) return;
    if (2 * i + 1 > n && v[2 * i] >= v[i]) swap (v[2 * i], v[i]);
    else if (max (v[2 * i], v[2 * i + 1]) > v[i])
    {
        int x;
        if (v[2 * i] > v[2 * i + 1]) x = 2 * i;
        else x = 2 * i + 1;

        swap (v[i], v[x]);
        hip (x);
    }
}

int main ()
{
    freopen ("algsort.in", "r", stdin);
    freopen ("algsort.out", "w", stdout);

    scanf ("%d", &n);

    for (int i = 1; i <= n; ++i)
        scanf ("%d", &v[i]);

    for (int i = n / 2; i; --i)
        hip (i);

    int cn = n;
    for (--n; n; --n)
    {
        swap (v[1], v[n + 1]);
        hip (1);
    }

    for (int i = 1; i <= cn; ++i)
        printf ("%d ", v[i]);

    printf ("\n");

    return 0;
}