Cod sursa(job #1235113)

Utilizator delia_99Delia Draghici delia_99 Data 28 septembrie 2014 19:50:53
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 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)&&(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(((2*k+1)<=n)&&(H[2*k+1]<H[2*k]))
                    if(H[2*k]>H[k])
                    {
                        swap(H[2*k],H[k]);
                        HeapDown(2*k,n);
                    }
                    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;
}