Cod sursa(job #1385022)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 11 martie 2015 17:11:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
# include <cstdio>
# include <algorithm>
# define MAX 500005

using namespace std;

int a[MAX], i, n;


void Heap (int i)
{
    int st, dr;
    if (2 * i > n) return;
    if (2 * i <= n)
    {
        st = a[2*i];
        if (2 * i + 1 <= n) dr = a[2 * i + 1];
        else dr = st - 1;

        if (st > dr)
        {
            if (a[2 * i] > a[i])
            {
                swap(a[2 * i], a[i]);
                Heap(2 * i);
            }
        }
        else if (a[2 * i + 1] > a[i])
        {
            swap(a[2 * i + 1], a[i]);
            Heap(2 * i + 1);
        }
    }
}

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

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


    for (i = n / 2; i >= 1; i--) Heap(i);

    while (n > 0) {
        swap (a[1], a[n]);
        n--;
        Heap(1);
    }

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


    printf("\n");


    return 0;
}