Cod sursa(job #1310209)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 6 ianuarie 2015 16:24:44
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>

using namespace std;
int n, h[500100], sz;

inline void Urca(int poz)
{
       if(poz == 1)
              return;
       if(h[poz] < h[poz / 2])
       {
                 swap(h[poz], h[poz / 2]);
                 Urca(poz / 2);
       }
}

inline void Coboara(int poz)
{
       if(poz * 2 > sz)
              return;
       int minim = 2 * poz;
       if(poz * 2 + 1 <= sz && h[poz * 2] > h[poz * 2 + 1])
              minim = 2 * poz + 1;
       if(h[poz] > h[minim])
       {
                 swap(h[poz], h[minim]);
                 Coboara(minim);
       }
       
}

int main()
{
    int i, x;
    ifstream fin("algsort.in");
    fin >> n;
    for(i = 1; i <= n; ++i)
    {
          fin >> x;
          h[++sz] = x;
          Urca(sz);
    }
    fin.close();
    
    ofstream fout("algsort.out");
    for(i = 1; i <= n; ++i)
    {
          fout << h[1] << ' ';
          swap(h[1], h[sz]);
          sz--;
          Coboara(1);
    }
    fout << endl;
    fout.close();
    return 0;
}