Cod sursa(job #1305843)

Utilizator RaileanuCristian Raileanu Raileanu Data 30 decembrie 2014 11:18:10
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
using namespace std;
#define M 500020
int ans[M],nr_ans,n, i,v, a[M] ;
ifstream f1("algsort.in");
ofstream f2("algsort.out");

void insHeap(int val)
{
    nr_ans++;
    int parinte=nr_ans, fiu=nr_ans ;

    while (parinte > 1 )
    {
        parinte/=2;
        if (val <= ans[parinte] )
            break;
        ans[fiu]= ans[parinte];

        fiu=parinte;
    }
    ans[fiu ]= val;
}

int extractHeap()
{
    int x=ans[1], parinte=1 ,fiu;

    ans[1]= ans[ nr_ans];
    ans[nr_ans-- ]=0;

    while (ans[parinte] < ans[2*parinte ] || ans[parinte] < ans[2*parinte+1 ] )
    {
        if (ans[2*parinte ] > ans[2*parinte+1 ] )
            fiu= 2*parinte;
            else fiu=2*parinte+1;

        swap(ans[parinte],ans[fiu] );
        parinte=fiu;
    }

    return x;
}

int main()
{
    f1>>n;
    for (i=1; i<=n; i++)
    {
        f1>>v;
        insHeap(v);
    }

    for (i=n; i>0; i--)
        a[i]=extractHeap();

    for (i=1; i<=n; i++)
        f2<<a[i] <<" ";
    f2.close();
    return 0;
}