Cod sursa(job #1466372)

Utilizator mihaiadelinamihai adelina mihaiadelina Data 29 iulie 2015 00:31:58
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <iostream>
using namespace std;

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

int a[500001], n;
/* Repara heap-ul al carui radacina are ca index "i", presupunand ca
heap-urile care care au radacinile la copiii lui i sunt valide: 2 * i, 2 * i + 1;
*/
void maxHeap(int i, int m) {
    int left, right, larg, loc;
    left = 2 * i;
    right = 2 * i + 1;
    if ((left <= m) && a[left] > a[i]) {
        larg = left;
    }
    else {
        larg = i;
    }
    if((right <= m) && (a[right]) > a[larg]) {
        larg = right;
    }
    if (larg != i) {
        loc = a[i];
        a[i] = a[larg];
        a[larg] = loc;
        maxHeap(larg, m);
    }
}

void buildMaxHeap() {
    int i;
    for (i = n / 2; i >= 1; i--) {
        maxHeap(i, n);
    }
}

void heapSort() {
    int i, aux;
    buildMaxHeap();

    for (i = n; i >= 2; i--) {
        aux = a[i];
        a[i] = a[1];
        a[1] = aux;
        maxHeap(1, i - 1);
    }
}

int main() {
    int i;
    fin >> n;

    for (i = 1; i <= n; i++) {
        fin >> a[i];
    }
    heapSort();

    for (i = 1; i <= n; i++) {
        fout << a[i] << "\n";
    }
    return 0;
}