Cod sursa(job #2270127)

Utilizator marumatMatei Marussi Alexandru marumat Data 27 octombrie 2018 09:32:01
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,i,h[500001];
void heapup(int x)
{
    if(x>1){
        if(h[x]>h[x/2])
            swap(h[x],h[x/2]);
        heapup(x/2);
    }
}
void heapdown(int x,int n)
{int st,dr;
    if(2*x<=n)
    {
        st=h[2*x];
        if(2*x+1<=n)dr=h[2*x+1];
        else dr=st-1;
        if(st>dr && h[x]<st){
            swap(h[x],h[2*x]);
            heapdown(2*x,n);
        }
        else if(h[x]<dr)
        {
            swap(h[x],h[2*x+1]);
            heapdown(2*x+1,n);
        }
    }
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    f>>h[i];
    for(i=2;i<=n;i++)
    heapup(i);
    for(i=1;i<=n-1;i++)
    {swap(h[1],h[n-i+1]);
    heapdown(1,n-i);
    }
    for(i=1;i<=n;i++)
        g<<h[i]<<" ";

    return 0;
}