Cod sursa(job #2290777)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 26 noiembrie 2018 22:58:57
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.61 kb

#include<iostream>
#include<fstream>
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");
int heap[1000005];
int n, k;
void adauga_nod(int pozitie)
{
    if(pozitie > 1)
    {
        if(heap[pozitie] <= heap[pozitie/2])
        {
            int aux = heap[pozitie];
            heap[pozitie] = heap[ pozitie / 2];
            heap[pozitie / 2] = aux;
            adauga_nod(pozitie / 2);
        }
    }
}
void restabilire_arbore( int pozitie, int top)
{
    int left, right;
    if(pozitie * 2 <= top)
    {
        left = heap[pozitie * 2];
        if(pozitie * 2  + 1 <= top)
            right = heap[ pozitie * 2 + 1];
        else right = left + 1;
        if( left < right && heap[pozitie] > left)
        {
            int aux = heap[pozitie];
            heap[pozitie] = heap[pozitie * 2];
            heap[pozitie * 2] = aux;
            restabilire_arbore(pozitie * 2, top);
        }
        else if( heap[ pozitie] > right)
        {
            int aux = heap[pozitie];
            heap[pozitie] = heap[pozitie * 2 + 1];
            heap[pozitie * 2 + 1] = aux;
            restabilire_arbore(pozitie * 2 + 1, top);
        }
    }
}
int main()
{


    f >> n;
    for(int i = 1; i <= n; i++)
    {
        f >> heap[i];
        adauga_nod(i);
    }
   // g << heap[1]<<" ";
    //int aux = heap[1];
    //heap[1] = heap[n];
    //heap[n] = aux;

    for( int  i = n; i >= 1; i--)
    {
        //restabilire_arbore(1, i);
        int aux = heap[1];
        heap[1] = heap[i];
        heap[i] = aux;
        restabilire_arbore(1, i-1);

    }
    for(int i= n; i >= 1; i--)
    g << heap[i]<< " ";
    return 0;

}