Cod sursa(job #1235164)

Utilizator delia_99Delia Draghici delia_99 Data 28 septembrie 2014 21:30:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,H[500005],i;

void HeapUp(int k)
{
    if(k==1)
        return;
    else
    {
        if(H[k]>H[k/2]&&k>1)
        {
            swap(H[k],H[k/2]);
            HeapUp(k/2);
        }
        else return;
    }
}

void HeapDown(int k,int n)
{
    if(k==n)
        return;
    else
    {
        if((2*k)<=n)
        {
            if((2*k+1)<=n)
            {
                if(H[2*k+1]>=H[2*k])
                {
                    if(H[2*k+1]>H[k])
                    {
                        swap(H[2*k+1],H[k]);
                        HeapDown(2*k+1,n);
                    }
                    else return;
                }
                else
                {
                    if(H[2*k]>H[k])
                    {
                        swap(H[2*k],H[k]);
                        HeapDown(2*k,n);
                    }
                    else return;
                }
            }
            else
            {
                if(H[2*k]>H[k])
                    swap(H[2*k],H[k]);
                else return;
            } ;
        }
        else return;
    }
}

void HeapSort(int n)
{
    for(i=n; i>=2; i--)
    {
        swap(H[1],H[i]);
        HeapDown(1,i-1);
    }
    return;
}
int main()
{
    f>>n;
    for(i=1; i<=n; i++)
        f>>H[i];
    for(i=2; i<=n; i++)
        HeapUp(i);
    HeapSort(n);
    for(i=1; i<=n; i++)
        g<<H[i]<<" ";

    return 0;
}