Cod sursa(job #1040974)

Utilizator flamey19Savu Daniel flamey19 Data 25 noiembrie 2013 11:55:13
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");
int H[500000],n;

void HeapUp(int n)
{
    int t;
    if(n<=1) return;
    t=n/2;
    if(H[n]>H[t])
    {
        swap(H[n],H[t]);
        HeapUp(t);
    }
}
void buildH(int n)
{
    int i;
    for(i=2; i<=n; ++i)
        HeapUp(i);
}
void HeapDown(int p,int n)
{
    int i,St,Dr;
    if(2*p<=n)
    {
        St=H[2*p];
        if(2*p+1<=n) Dr=H[2*p+1];
        else Dr=St-1;
        if(St>Dr) i=2*p;
        else i=2*p+1;
        if(H[p]<H[i])
        {
            swap(H[p],H[i]);
            HeapDown(i,n);
        }
    }
}
void SortHeap(int n)
{
    while(n>1)
    {
        swap(H[1],H[n]);
        n--;
        HeapDown(1,n);
    }
}
int main()
{
    int i;
    f>>n;
    for(i=1;i<=n;i++)
        f>>H[i];
    buildH(n);
    SortHeap(n);
    for(i=1;i<=n;i++)
        g<<H[i]<<" ";
        return 0;
}