Cod sursa(job #2739280)

Utilizator DianaIfrosaIfrosa Diana DianaIfrosa Data 7 aprilie 2021 15:08:34
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

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

vector <int> min_heap;
int n;

int IndexStanga(int i)
{
    return 2*i+1;
}
int IndexDreapta(int i)
{
    return 2*i+2;
}

void coboara(int i)
{
    int st,dr,pozmin;
    st=IndexStanga(i);
    dr=IndexDreapta(i);

    pozmin=i;

    if(st<n && min_heap[st]<min_heap[pozmin])
        pozmin=st;
    if(dr<n && min_heap[dr]<min_heap[pozmin])
        pozmin=dr;

    if(pozmin!=i) //v[i] nu e mai mic decat ambii=> trebuie sa-i dau swap cu un fiu
    {
        swap(min_heap[i], min_heap[pozmin]);
        coboara(pozmin);
    }


}

void Min_Heapify()
{
    for(int i=n/2; i>=0; i--)
        coboara(i);

}

int Heap_Pop()
{
    int radacina=min_heap.front();

    min_heap[0]=min_heap[n-1]; //mut ultimul element in radacina

    min_heap.pop_back();

    coboara(0); //coboara radacina

    return radacina;

}
void HeapSort()
{
    for(int i=0; i<n; i++)
        fout<<Heap_Pop()<<" ";

}
int main()
{
    int x;

    fin>>n;
    for(int i=0; i<n; i++)
    {
        fin>>x;
        min_heap.push_back(x);
    }

    Min_Heapify();
    HeapSort();



    return 0;
}