Cod sursa(job #1232556)

Utilizator rzvrzvNicolescu Razvan rzvrzv Data 23 septembrie 2014 10:02:29
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<cstdio>

using namespace std;

int h[500002],k,i,n,x;

void swap(int p1,int p2)
{
    int x;
    x=h[p1];
    h[p1]=h[p2];
    h[p2]=x;
}

void heapup(int nod)
{
    if(nod/2>=1)
    {
        if(h[nod]>h[nod/2])
        {
            swap(nod,nod/2);
        }
    }
}

void insert(int x)
{
    k++;
    h[k]=x;
    heapup(k);
}

void heapdown(int nod,int k)
{
    int st,dr;
    if(nod*2<=k)
    {
        st=h[nod*2];
        if(nod*2+1<=k)
        {
            dr=h[nod*2+1];
        }
        else dr=st-1;
        if(st>dr)
        {
            swap(nod,nod*2);
            heapdown(nod*2,k);
        }
        else
        {
            swap(nod,nod*2+1);
            heapdown(nod*2+1,k);
        }
    }
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&x);
        insert(x);
    }
    for(i=1;i<=n-1;i++)
    {
        swap(k,1);
        k--;
        heapdown(1,k);
    }
    for(i=1;i<=n;i++)
    {
        printf("%d ",h[i]);
    }
    printf("\n");
    return 0;
}