Cod sursa(job #1052925)

Utilizator SorinaSmeureanuSorina Smeureanu SorinaSmeureanu Data 11 decembrie 2013 22:06:36
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int nr, heap[500001], j;

void urca(int n, int poz)
{
    while(poz>1 && heap[poz]<heap[poz/2])
    {
        swap(heap[poz], heap[poz/2]);
        poz=poz/2;
    }
}

void insertt(int &n, int val)
{
    n++;
    heap[n]=val;
    urca(n, n);
}

void coboara(int n, int poz)
{
    int poz1;
    while(poz*2+1<=n && (heap[poz]>heap[poz*2] || heap[poz]>heap[poz*2+1]))
    {
        poz1=poz*2;
        if(heap[poz*2+1]<heap[poz*2])
            poz1=poz*2+1;
        swap(heap[poz], heap[poz1]);
        poz=poz1;
    }
    if(poz*2==n && heap[poz]>heap[poz*2])
        swap(heap[poz], heap[poz*2]);
}
void delete_min (int &n)
{
    g<<heap[1]<<" ";
    heap[1]=heap[n--];
    coboara(n, 1);
}
int main()
{
    int i, x;
    j=0;
    f>>nr;
    for(i=1;i<=nr;i++)
    {
        f>>x;
        insertt(j,x);
    }
    for(i=1;i<=nr;i++)
        delete_min(j);
}