Cod sursa(job #1060888)

Utilizator PokerDawgCristian Popov PokerDawg Data 18 decembrie 2013 21:08:55
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

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

int n;
long v[500000];

void urca(int p)
{
    int a;
    while (v[p] > v[p/2] && p/2 > 0)
    {
        a = v[p];
        v[p] = v[p/2];
        v[p/2] = a;
        p /= 2;
    }
}

void coboara(int p, int m)
{
    int a;
    if (2 * p < m && v[p] < v[p * 2])
    {
        a = v[p];
        v[p] = v[p*2];
        v[p*2] = a;
        coboara(2 * p, m);
    }
    if (2 * p  + 1 < m && v[p] < v[p * 2 + 1])
    {
        a = v[p];
        v[p] = v[p*2 + 1];
        v[p*2 + 1] = a;
        coboara(2 * p + 1, m);
    }
}

void heap_sort()
{
    int a;
    for (int i = n ; i > 0; i --)
    {
        a = v[1];
        v[1] = v[i];
        v[i] = a;
        coboara(1, i);
    }
}

int main()
{
    in >> n;
    for (int i = 1; i <= n; i ++)
    {
        in >> v[i];
        urca(i);
    }

    heap_sort();

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

    in.close();
    out.close();
    return 0;
}