Cod sursa(job #2158257)

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

using namespace std;

int v[500005];
int n, maxHeapSize;

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

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);
    ios_base::sync_with_stdio(0);
    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] << " ";
}