Cod sursa(job #2847124)

Utilizator matei.ulmeanuUlmeanu Matei Antoniu matei.ulmeanu Data 10 februarie 2022 12:03:36
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <algorithm>

using namespace std;

int n;
int v[1000002];

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

void downheap(int p)
{
    if(v[p] <= v[2*p] && v[p] <= v[2*p + 1])
        return;

    if(v[2*p] < v[2*p + 1])
    {
        swap(v[p], v[2*p]);
        downheap(2*p);
    }
    else
    {
        swap(v[p], v[2*p + 1]);
        downheap(2*p + 1);
    }
}

void upheap(int p)
{
    if(p <= 1)
        return;

    if(v[p] < v[p / 2])
    {
        swap(v[p], v[p / 2]);
        upheap(p / 2);
    }
}

int main()
{
    int n;
    fin >> n;

    for(int i = 1; i <= 2 * n + 1; i++)
        v[i] = INT_MAX;

    for(int i = 1; i <= n; i++)
    {
        fin >> v[i];
        upheap(i);
    }

    for(int i = n; i >= 1; i--)
    {
        fout << v[1] << ' ';
        swap(v[1], v[i]);
        v[i] = INT_MAX;
        downheap(1);
    }

    return 0;
}