Cod sursa(job #1521672)

Utilizator goalexboxerFMI Alexandru Ionascu goalexboxer Data 10 noiembrie 2015 19:14:25
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<iostream>
#include<fstream>
#include<vector>
#define FIN "algsort.in"
#define FOUT "algsort.out"
#define MAXN 500001
using namespace std;

int heap[MAXN];
int n;
int solution[MAXN];

ifstream f(FIN);
ofstream g(FOUT);

int leftSon(int i)
{
    return heap[2 * i];
}

int rightSon(int i)
{
    return heap[2 * i + 1];
}

int heapify(int k)
{
    if(!(rightSon(k) || leftSon(k)))
    {
        return 0;
    }
    else
    {
        if(rightSon(k) > heap[k])
        {
            swap(heap[k], heap[2 * k + 1]);
            heapify(2 * k + 1);
        }

        if(leftSon(k) > heap[k])
        {
            swap(heap[k], heap[2 * k]);
            heapify(2 * k);
        }
    }

    return 0;
}

int makeHeap()
{
    for(int i = n / 2; i > 0; i--)
    {
        heapify(i);
    }

    return 0;
}

int remove(int k)
{
    heap[k] = 0;
    if(k == 1)
        heapify(1);
    else heapify(k / 2);

    return 0;
}

int main()
{
    f >> n;
    int index = n;
    for(int i = 1; i <= n; i++)
    {
        f >> heap[i];
    }

    makeHeap();

    for(int i=1; i<=n; i++)
    {
        solution[index] = heap[1];
        index--;
        remove(1);
    }

    for(int i=1; i<=n; i++)
        g << solution[i] << " ";

    return 0;

}