Cod sursa(job #2068716)

Utilizator KemyKoTeo Virghi KemyKo Data 18 noiembrie 2017 10:40:03
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#define NMAX 500001

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int h[NMAX], n;

void up(int p)
{
    if(p>1 && h[p/2]>h[p]){
        swap(h[p], h[p/2]);
        up(p/2);
    }
}

void add(int x)
{
    h[++n]=x;
    up(n);
}

void down(int p)
{
    if(p*2+1<=n && (h[p*2]<h[p] || h[p*2+1]<h[p])){
        if(h[p*2]<h[p*2+1]){
            swap(h[p], h[p*2]);
            down(p*2);
        }else{
            swap(h[p*2+1], h[p]);
            down(p*2+1);
        }
    }else if(p*2<=n && h[p*2]<h[p]){
        swap(h[p*2], h[p]);
    }
}

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

void citire()
{
    int i,x,nums;
    f>>nums>>h[++n];
    for(i=2;i<=nums;i++){
        f>>x;
        add(x);
    }
}

int main()
{
    citire();
    while(n>0){
        g<<h[1]<<' ';
        del(1);
    }
    return 0;
}