Cod sursa(job #1424604)

Utilizator sulzandreiandrei sulzandrei Data 25 aprilie 2015 00:34:29
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 500003
ifstream in("algsort.in");
ofstream out("algsort.out");
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(int H[],int n);
void Heapify(int H[],int i,int n);
void HeapSort(int H[],int n)
{
    BuildHeap(H,n);
    for( int i = n ; i > 0 ; i -- )
    {
        out << H[1] << " ";
        swap(H[1],H[i]);
        n--;
        Heapify(H,1,n);
    }
}
void BuildHeap(int H[],int n)
{
    for(int i = n/2; i>0 ; i-- )
        Heapify(H,i,n);
}
void Heapify(int H[],int i,int n)
{
    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 n,i;
    in >> n;
    int heap[n+1];
    for( i = 1 ; i <= n ; i++)
        in >> heap[i];
    HeapSort(heap,n);
    return 0;
}