Cod sursa(job #2058342)

Utilizator narcischitescuNarcis Chitescu narcischitescu Data 5 noiembrie 2017 15:09:11
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 2.53 kb
#include <stdio.h>
#include <stdlib.h>


#define NMAX 500001

//This will be a maxHEAP

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++ )
        printf("%d " , HEAP[index] ) ;
    printf("\n");
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int n, index , x;
    int HEAP[NMAX] , dimHEAP = 0;
    scanf("%d",&n);
    for ( index = 1; index <= n ; index++ )
    {
        scanf("%d", &x);
        //HEAP[index] = x;
        addtoHEAP(HEAP,&dimHEAP,x);
    }

   int S[NMAX] ;
    for ( index = n ; index >= 1; index-- )
    {
        S[index] = HEAP[1];
        extractfromHEAP(HEAP,&dimHEAP);
    }

    printHEAP(S,n);
    return 0;
}