Cod sursa(job #1424608)

Utilizator sulzandreiandrei sulzandrei Data 25 aprilie 2015 00:40:36
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 500003
ifstream in("algsort.in");
ofstream out("algsort.out");
int H[nmax],n;
inline int ls(int i)
{
    return (2*i);
}
inline int rs(int i)
{
    return (2*i+1);
}
inline int father(int i)
{
    return (i/2);
}
void BuildHeap();
void Heapify(int i);
void HeapSort()
{
    BuildHeap();
    for( int i = n ; i > 0 ; i -- )
    {
        out << H[1] << " ";
        swap(H[1],H[i]);
        n--;
        Heapify(1);
    }
}
void BuildHeap()
{
    for(int i = n/2; i>0 ; i-- )
        Heapify(i);
}
void Heapify(int i)
{
    int posmin,pos = i;
    posmin = 1;
    while(posmin)
    {
        posmin = pos;
        if ( ls(pos) <= n && H[ls(pos)]<H[posmin] )
            posmin = ls(pos);
        if ( rs(pos)<= n && H[rs(pos)]<H[posmin])
            posmin = rs(pos);
        if ( pos!=posmin )
        {
            swap(H[pos],H[posmin]);
            pos = posmin;
        }
        else
            pos = 0;
    }
}
int main()
{
    int i;
    in >> n;
    for( i = 1 ; i <= n ; i++)
        in >> H[i];
    HeapSort();
    return 0;
}