Cod sursa(job #1326104)

Utilizator frantiu.andreiFrantiu Andrei Mihai frantiu.andrei Data 24 ianuarie 2015 18:15:39
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#define NMax 2000

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int X[NMax],H[NMax];
int N,NHeap;

void Read()
{
    fin>>N;
    for(int i=1;i<=N;i++)
        fin>>X[i];
}

void UpHeap(int x)
{
    int TT=x/2;

    if(TT && H[x]<H[TT])
    {
     swap(H[x],H[TT]);
     UpHeap(TT);
    }
}
void DownHeap(int x)
{
    int Son=2*x;

    if(Son+1<=NHeap && H[Son+1]<H[Son])
        Son++;

    if(Son<=NHeap && H[Son]<H[x])
        {
            swap(H[Son],H[x]);
            DownHeap(Son);
        }
}

void BuildHeap()
{
    for(int i=1;i<=N;i++)
        {
            H[++NHeap] = X[i];
            UpHeap(NHeap);
        }
}

void HeapSort()
{
    for(int i=1;i<=N;i++)
    {
        X[i] = H[1];
        H[1] = H[NHeap--];
        DownHeap(1);
    }
}

void Print()
{
    for(int i=1;i<=N;i++)
        fout<<X[i]<<" ";
    fout<<"\n";
}

int main()
{
    Read();
    BuildHeap();
    HeapSort();
    Print();
    return 0;
}