Cod sursa(job #2078205)

Utilizator anca.sotirAnca Sotir anca.sotir Data 29 noiembrie 2017 02:57:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#define nmax 500002
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int heap[nmax],heap_size,n;
void interschimba(int i,int j)
{
    int aux=heap[i];
    heap[i]=heap[j];
    heap[j]=aux;
}
void InsMinHeap(int x)
{
    heap[++heap_size]=x;
    int poz=heap_size;
    while(poz!=1)
    {
        int tata=poz/2;
        if(heap[tata]>heap[poz])
            interschimba(tata,poz);
        poz/=2;
    }
}
void MinHeapify(int k)
{
    if(k<=heap_size)
    {
        int minim=k;
        if(k*2<=heap_size && heap[k*2]<heap[k])
            minim=k*2;
        if(k*2+1<=heap_size && heap[k*2+1]<heap[minim])
            minim=k*2+1;
        if(minim!=k)
        {
            interschimba(k,minim);
            MinHeapify(minim);
        }
    }
}
int DelMinHeap()
{
    int minim=heap[1];
    interschimba(1,heap_size);
    --heap_size;
    MinHeapify(1);
    return minim;
}
int main()
{
    int heap_size=0;
    f>>n;
    for(int i=1; i<=n; ++i)
    {
        int x;
        f>>x;
        InsMinHeap(x);
    }
    for(int i=1;i<=n; ++i)
        g<<DelMinHeap()<<' ';
    return 0;
}