Cod sursa(job #1041794)

Utilizator costyrazvyTudor Costin Razvan costyrazvy Data 26 noiembrie 2013 09:33:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

using namespace std;
int v[500001],i,n,k;
void heap_up(int nod)
{
    while (v[nod/2]<v[nod] && nod>1)
       {
           swap(v[nod/2],v[nod]);
           nod=nod/2;
       }
}
void heap_down(int nod)
{
    if (nod*2+1<=k && max(v[nod*2+1],v[nod*2])>v[nod])
    {
        if (v[nod*2+1]>v[nod*2]) swap(v[nod],v[nod*2+1]),heap_down(nod*2+1);
           else swap(v[nod],v[nod*2]),heap_down(nod*2);
    }
    else if (nod*2<=k && v[nod*2]>v[nod])
    {
        swap(v[nod],v[nod*2]);
        heap_down(nod*2);
    }
}
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    f>>n;
    int x;
    for (i=1;i<=n;i++) f>>x,v[i]=x,heap_up(i);
    k=n;
    while (k>1)
    {   swap(v[1],v[k]);
        k--;
        heap_down(1);
    }
    for (i=1;i<=n;i++) g<<v[i]<<" ";
    g<<'\n';
    f.close();
    g.close();
    return 0;
}