Cod sursa(job #2189527)

Utilizator AndreiTudorSpiruAndrei Spiru AndreiTudorSpiru Data 28 martie 2018 16:00:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500001],l,n;
void up(int p)
{
    if(v[p]<v[p/2]&&p>1)
    {
        swap(v[p],v[p/2]);
        up(p/2);
    }
}
void down(int p)
{
    if(2*p+1<=l)
    {
        if(v[2*p]<v[p]||v[2*p+1]<v[p])
        {
            if(v[2*p]<v[2*p+1])
            {
                swap(v[p],v[2*p]);
                down(2*p);
            }
            else{
                swap(v[p],v[2*p+1]);
                down(2*p+1);
            }
        }
    }
    else if(2*p<=l)
    {
        if(v[2*p]<v[p])
        {
            swap(v[p],v[2*p]);
            down(2*p);
        }
    }
}
void del(int p)
{
    swap(v[p],v[l]);
    l--;
    up(p);
    down(p);
}
int main()
{
    f>>n;
    int x;
    for(int i=1;i<=n;i++)
    {
        f>>x;
        l++;
        v[l]=x;
        up(l);
    }
    while(l>0)
    {
        g<<v[1]<<" ";
        del(1);
    }
    return 0;
}