Cod sursa(job #2058362)

Utilizator narcischitescuNarcis Chitescu narcischitescu Data 5 noiembrie 2017 15:38:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.62 kb
#include <fstream>

using namespace std;

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

#define NMAX 500001

//This will be a minHEAP

void addtoHEAP( int HEAP[], int &dimHEAP, int x )
{
    dimHEAP = dimHEAP + 1;
    HEAP[dimHEAP] = x;
    int currentIndex = dimHEAP;
    while(currentIndex>=2 && HEAP[currentIndex/2] > x )
    {
        int aux = HEAP[currentIndex/2];
        HEAP[currentIndex/2] = HEAP[currentIndex];
        HEAP[currentIndex] = aux;
        currentIndex /= 2;
    }
}

void makeHEAP( int HEAP[] , int dimHEAP )
{
    int son,index;
        index = 1;
     do
     {
        son = 0;
        if( 2*index <= dimHEAP )
        {
            son = 2*index;
            if ( 2*index+1 <= dimHEAP && HEAP[2*index+1] > HEAP[2*index] )
            {
                son = 2*index+1;

            }
            if ( HEAP[index] >= HEAP[son] )
                {
                    son = 0;
                }
        }
        if ( son )
        {
            int aux = HEAP[index];
            HEAP[index] = HEAP[son];
            HEAP[son] = aux;
            index = son;
        }
     }while(son);

}

void extractfromHEAP( int HEAP[] , int &dimHEAP )
{
    int aux = HEAP[1];
    HEAP[1] = HEAP[dimHEAP];
    HEAP[dimHEAP] = aux;

     --dimHEAP;

     int son,index;
        index = 1;
     do
     {
        son = 0;
        if( 2*index <= dimHEAP )
        {
            son = 2*index;
            if ( 2*index+1 <= dimHEAP && HEAP[2*index+1] < HEAP[2*index] )
            {
                son = 2*index+1;

            }
            if ( HEAP[index] < HEAP[son] )
                {
                    son = 0;
                }
        }
        if ( son )
        {
            int aux = HEAP[index];
            HEAP[index] = HEAP[son];
            HEAP[son] = aux;
            index = son;
        }
     }while(son);
}
void printHEAP ( int HEAP[] , int dimHEAP )
{
    int index;
    for ( index = 1; index <= dimHEAP ; index++ )
       g << HEAP[index] << " " ;
    g << "\n";
}

int main()
{
   // freopen("algsort.in","r",stdin);
   // freopen("algsort.out","w",stdout);
    int n, index , x;
    int HEAP[NMAX] , dimHEAP = 0;

    f >> n;//scanf("%d",&n);
    for ( index = 1; index <= n ; index++ )
    {
        f >> x;
        //scanf("%d", &x);
        //HEAP[index] = x;
        addtoHEAP(HEAP,dimHEAP,x);
    }

   int S[NMAX] ;
    for ( index = n ; index >= 1; index-- )
    {
        g << HEAP[1] << " " ;
        extractfromHEAP(HEAP,dimHEAP);
    }
    //printHEAP(HEAP,dimHEAP);




    return 0;
}