Cod sursa(job #2270120)

Utilizator avramraresAvram Rares Stefan avramrares Data 27 octombrie 2018 09:27:54
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int H[500003],x,n,i,aux,srt[500003];
int HeapUp(int x)
{
    if(x>1)
    {
        if(H[x]>H[x/2])
        {
            swap(H[x],H[x/2]);
            HeapUp(x/2);
        }
    }
}
int 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 (max(st,dr)>H[x])
        {
            if (st>dr)
            {
                swap(H[x],H[2*x]);
                HeapDown(2*x,n);
            }
            else
            {
                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];
        HeapUp(i);
    }
    aux=n;
    while(n>1)
    {
        swap(H[1],H[n]);
        srt[n]=H[n];
        n--;
        HeapDown(1,n);
    }
    srt[1]=H[1];
    for(i=1; i<=aux; i++)
        g<<srt[i]<<" ";
    return 0;
}