Cod sursa(job #1236193)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 1 octombrie 2014 17:01:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
# include <cstdio>
#include <algorithm>
using namespace std;
int a[500001],n,i;
void CombHeap(int i, int n)
{
    int St,Dr;
    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[i]<a[2*i])
            {
                swap(a[2*i],a[i]);
                CombHeap(2*i,n);
            }
        }
        else if (a[i]<a[2*i+1])
        {
            swap(a[2*i+1],a[i]);
            CombHeap(2*i+1,n);
        }
    }
}

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

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

    for (i=n/2; i; i--) CombHeap(i,n);


    int cn=n;
    while (n>0)
    {
        swap(a[1],a[n]);
        n--;
        CombHeap(1,n);
    }


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