Cod sursa(job #2897986)

Utilizator marateodorescu11Teodorescu Mara marateodorescu11 Data 5 mai 2022 16:46:55
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int n, nh;
const int N = 500001;
int h[N], v[N];
void urca (int p)
{
    while (p > 1 && h[p] < h[p/2])
    {
        swap (h[p], h[p/2]);
        p/=2;
    }
}
void coboara (int p)
{
    int fs = 2 * p;
    int fd = 2 * p + 1;
    int bun = p;
    if (fs <= nh && h[fs] < h[bun])
        bun = fs;
    if (fs <= nh && h[fd] < h[bun])
        bun = fd;
    if (bun != p)
    {
        swap (h[p], h[bun]);
        coboara (bun);
    }
}
void adauga (int val)
{
    h[++nh] = val;
    urca(nh);
}
void sterge (int p)
{
    if (p == nh)
    {
        nh --;
        return ;
    }

    h[p] = h[nh --];
    urca(p);
    coboara(p);

}
int main()
{
    fin >> n;
    nh = 0;
    for (int i=1; i<=n; i++)
    {
        int val;
        fin >> val;
        adauga(val);
    }

    for (int i=0; i<n; i++)
    {
        v[i] = h[1];
        sterge(1);
    }
    for (int i=0; i<n; i++)
        fout << v[i] << " ";

    return 0;
}