Cod sursa(job #2068701)

Utilizator MAlexandruMatei Alexandru MAlexandru Data 18 noiembrie 2017 10:32:51
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <math.h>
using namespace std;
int n,x,b,m,i,a[500001];
void up(int p)
{
    if (p>1 && a[p/2]>a[p])
    {
        swap(a[p],a[p/2]);
        up(p/2);
    }
}


void down (int p)
{

    if (p*2+1<=m && (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*2+1],a[p]);
            down(p*2+1);
        }
    }
        else if (p*2<=m && a[p*2]<a[p])
            swap (a[p*2],a[p]);

}

void add (int x)
{
    a[++m]=x;
    up(m);
}

void del(int p)
{
    swap(a[p],a[m]);
    m--;
    up(p);
    down(p);
}

int main()
{
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    fin >> n;
    fin >> a[1];
    m=1;
    for (i=2; i<=n; i++)
    {
        fin >> b;
        add(b);
    }
    for (i=1; i<=n; i++)
    {
        fout << a[1] << " ";
        del(1);
    }
    fout << '\n';
    return 0;
}