Cod sursa(job #2766580)

Utilizator KlinashkaDiacicov Calin Marian Klinashka Data 2 august 2021 13:28:41
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#include <algorithm>
using namespace std;

int n, a[500001], sz;

void repair(int i) {
    int largest = i, l=2*i, r=2*i+1;
    if(l<=sz && a[largest]<a[l]) largest = l;
    if(r<=sz && a[largest]<a[r]) largest = r;
    if(largest!=i) {
        swap(a[largest], a[i]);
        repair(largest);
    }
} 

void build_heap() {
    for(int i=sz/2;i>=1;i--) {
        repair(i);
    }
}

void heapsort() {
    sz = n;
    build_heap();
    for(int i=1;i<=n;i++) {
        int mx = a[1];
        swap(a[1], a[sz]);
        sz--;
        repair(1);
    }
}

int main() {
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for(int i=1;i<=n;i++)
        scanf("%d", &a[i]);
    heapsort();
    for(int i=1;i<=n;i++)
        printf("%d ", a[i]);
}