Cod sursa(job #337790)

Utilizator DastasIonescu Vlad Dastas Data 4 august 2009 23:17:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cstdlib>
#include <algorithm>

using namespace std;

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

void swap(int &x, int &y)
{
    int tmp = x;
    x = y;
    y = tmp;
}

void Down(int A[], int poz, int N)
{
    int FiuSt, FiuDr, Schimb;
    while ( 2*poz <= N )
    {
        FiuSt = 2*poz;
        FiuDr = 2*poz + 1;

        Schimb = FiuSt;
        if ( FiuDr <= N )
            if ( A[FiuDr] > A[Schimb] )
                Schimb = FiuDr;

        if ( A[Schimb] > A[poz] )
        {
            swap(A[Schimb], A[poz]);
            poz = Schimb;
        }
        else
            break;
    }
}

void go(int A[], int N)
{
    for ( int i = N / 2; i >= 1; --i )
        Down(A, i, N);
}

void Heapsort(int A[], int N)
{
    go(A, N);
    for ( int i = N; i >= 1; --i )
    {
        swap(A[i], A[1]);
        Down(A, 1, i - 1);
    }
}

int A[500020];
int main()
{
    int n;
    srand((unsigned)time(0));

    in >> n;
    for ( int i = 1; i <= n; ++i )
        in >> A[i];
    Heapsort(A, n);

    for ( int i = 1; i <= n; ++i )
        out << A[i] << " ";

    return 0;
}