Cod sursa(job #2890970)

Utilizator StanCatalinStanCatalin StanCatalin Data 17 aprilie 2022 11:26:16
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int dim = 500005;

int a[dim], n;

void Coboara(int i) {
    int left = (i<<1);
    int right = (i<<1) + 1;

    int maxi = i;
    if (a[left] > a[maxi]) {
        maxi = left;
    }
    if (a[right] > a[maxi]) {
        maxi = right;
    }

    if (maxi != i && maxi <= n) {
        swap(a[i], a[maxi]);
        Coboara(maxi);
    }
}

int main() {
    in >> n;
    for (int i=1; i<=n; i++) {
        in >> a[i];
    }
    for (int i=n/2; i>=1; i--) {
        Coboara(i);
    }
    int n_cpy = n;
    while (n >= 1) {
        swap(a[1], a[n]);
        n--;
        Coboara(1);
    }
    for (int i = 1; i <= n_cpy; ++i) {
        out << a[i] << " ";
    }
    return 0;
}