Cod sursa(job #2290748)

Utilizator alexnigaNiga Alexandru alexniga Data 26 noiembrie 2018 22:03:13
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int  x[500001];

void push(int pas)
{
    while ( pas / 2 && x[pas / 2] < x[pas])
    {

        swap(x[pas], x[pas / 2]);
        pas = pas / 2;

    }
}

void pop(int pas, int &k)
{
    swap(x[pas], x[k]);
    k--;

    int aux = 0;
    while (pas != aux)
    {
        aux = pas;

        if (2 * aux <= k && x[pas] < x[aux * 2])
            pas = 2 * aux;

        if (2 * aux + 1 <= k && x[pas] < x[2 * aux + 1])
            pas = 2 * aux + 1;

        swap(x[pas], x[aux]);
    }
}

int main()
{
    int n, i, m;

    f >> n;
    for (i = 1; i <= n; i++)
            f >> x[i];

    for (i = 1; i <= n; i++)
            push(i);
    m = n;

    for(i = m; i >= 1; i--)
    {

        pop(1, n);

    }

    for(i = 1; i <= m; i++)
       g << x[i] << " ";




    return 0;
}