Cod sursa(job #2757027)

Utilizator Elena05Dumitrache Marcela Elena05 Data 3 iunie 2021 16:03:19
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

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

int nh, n;
const int N = 500001;
int v[N];

void urca(int p) {
    while(p > 1 && v[p] > v[p / 2]) {
        swap(v[p], v[p / 2]);
        p /= 2;
    }
}

void adauga(int val) {
    v[++nh] = val;
    urca(nh);
}

void coboara(int p) {
    int fs = 2 * p;
    int fd = 2 * p + 1;
    int bun = p;
    if(fs <= nh && v[fs] > v[bun]) {
        bun = fs;
    }
    if(fd <= nh && v[fd] > v[bun]) {
        bun = fd;
    }
    if(bun != p) {
        swap(v[bun], v[p]);
        coboara(bun);
    }
}

void output() {
    for(int i = 1; i <= n; i++) {
        out << v[i] << " ";
    }
    return;
}

int main() {
    in >> n;
    nh = 0;
    for(int i = 1; i <= n; i++) {
        int aux;
        in >> aux;
        adauga(aux);
    }
    for(int i = n; i >= 1; i--) {
        swap(v[1], v[i]);
        nh--;
        coboara(1);
    }
    output();
    return 0;
}