Cod sursa(job #1789420)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 26 octombrie 2016 23:31:57
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

const int NMAX = 500000;

int n, k, p;
int heap[NMAX + 5];

void hinsert(int x)
{
    heap[++k] = x; p = k;
    while (p > 1 && heap[p] < heap[p >> 1])
    {
        swap(heap[p], heap[p >> 1]);
        p >>= 1;
    }
}

void heapsort()
{
    for (int i = 1; i <= n; ++i)
    {
        printf("%d ", heap[1]);
        heap[1] = heap[k];
        --k; p = 1;

        while ((p << 1) <= k)
        {
            int st = (p << 1);
            int dr = st + 1;
            int best = st;

            if (dr <= k && heap[st] > heap[dr])
                best = dr;
            if (heap[p] > heap[best])
                swap(heap[p], heap[best]);
            else
                break;
            p = best;
        }
    }
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
    {
        int x;
        scanf("%d", &x);
        hinsert(x);
    }
    heapsort();
    return 0;
}