Cod sursa(job #2068692)

Utilizator DavidDragulinDragulin David DavidDragulin Data 18 noiembrie 2017 10:29:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

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