Cod sursa(job #2270119)

Utilizator BogdanGhGhinea Bogdan BogdanGh Data 27 octombrie 2018 09:26:45
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");
int a[500001],i,x,n;
void heapup(int x)
{
    if(x>1)
    {
        if(a[x]>a[x/2]){
            swap(a[x],a[x/2]);
            heapup(x/2);
        }
    }
}
void heapdown(int x,int n)
{
    int st,dr;
    if(2*x<=n)
    {
        st=a[2*x];
        dr=a[2*x+1];
        if(x*2+1<=n)dr=a[x*2+1];
        else dr=st-1;
        if(st>dr&&a[x]<st)
        {
            swap(a[x],a[2*x]);
            heapdown(2*x,n);
        }
        else if(a[x]<dr&&2*x+1<=n)
            {
                swap(a[x],a[2*x+1]);
                heapdown(2*x+1,n);
            }
    }
}
int main()
{
    f>>n;
    f>>a[1];
    for(i=2;i<=n;i++)
    {
        f>>a[i];
        heapup(i);
    }
    int m=n;
    while(n>1)
    {
        swap(a[1],a[n]);
        n--;
        heapdown(1,n);

    }
    for(i=1;i<=m;i++)
        g<<a[i]<<" ";
    return 0;
}