Cod sursa(job #2158222)

Utilizator bpalaniciPalanici Bogdan bpalanici Data 10 martie 2018 11:24:52
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

int v[500005];
int n, maxHeapSize;

void downheap(int poz) {
    if (poz > maxHeapSize / 2) return;
    if (v[poz] < v[poz << 1] && v[poz << 1] < v[(poz << 1) + 1])
        swap(v[poz], v[(poz << 1) + 1]),
        downheap((poz << 1) + 1);
    else if (v[poz] < v[poz << 1])
        swap(v[poz], v[poz << 1]),
        downheap(poz << 1);
}

void Make_Heap() {
    for (int i = n / 2; i >= 1; i--)
        downheap(i);
}

void Sort() {
    Make_Heap();
    for (int i = n; i >= 1; i--) {
        swap(v[1], v[i]);
        maxHeapSize--;
        downheap(1);
    }
}

int main() {
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> v[i];
    maxHeapSize = n;
    Sort();
    for (int i = 1; i <= n; i++)
        cout << v[i] << " ";
}