Cod sursa(job #1235839)

Utilizator savulescustefanSavulescu Stefan savulescustefan Data 30 septembrie 2014 19:33:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>

using namespace std;
int k,t,aux,h[500004],n,i;
void UP(int k)
{
    int t,aux;
    if (k==1)
        return;
    t=k/2;
    if (h[t]<h[k])
    {
        aux=h[t];
        h[t]=h[k];
        h[k]=aux;
        UP(t);
    }
}
void DOWN(int n, int k)
{
    int st,dr,i,aux;
    if (2*k<=n)
    {
        st=h[2*k];
        if (2*k+1<=n)
            dr=h[2*k+1];
        else
            dr=-1;
        if (st>dr)
            i=2*k;
        else
            i=2*k+1;
        if (h[i]>h[k])
        {
            aux=h[i];
            h[i]=h[k];
            h[k]=aux;
            DOWN(n,i);
        }
    }
}
int main()
{
    freopen ("algsort.in","r",stdin);
    freopen ("algsort.out","w",stdout);
    scanf ("%d", &n);
    for (i=1;i<=n;i++)
    {
        scanf ("%d", &h[i]);
        UP(i);
    }
    for (i=n;i>=1;i--)
    {
        aux=h[1];
        h[1]=h[i];
        h[i]=aux;
        DOWN(i-1,1);
    }
    for (i=1;i<=n;i++)
        printf ("%d ", h[i]);
    return 0;
}