Cod sursa(job #856826)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 16 ianuarie 2013 23:26:47
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <cstdlib>
#include <cstdio>

#define nmax 500001

int a [ nmax ] , N ;


void merge ( int stanga , int mid , int dreapta )
{
    int h , i , j , b [ nmax ] , k ;
    h = stanga ;
    i = stanga ;
    j = mid + 1 ;

    while (  h <= mid && j <= dreapta )
    {
        if ( a [ h ] <= a [ j ] )
        {
            b [ i ] = a [ h ] ;
            h++ ;
        }
        else
        {
            b [ i] = a [ j ] ;
            j++ ;
        }
        i++ ;
    }
    if ( h > mid )
    for ( k = j ; k <= dreapta ; k++ )
    {
        b [ i ] = a [ k ] ;
        i++ ;
    }

    else
    for(k=h;k<=mid;k++)
    {
        b [ i ] = a [ k ] ;
        i++ ;
    }

    for ( k = stanga ; k <= dreapta ; k++ )  a [ k ] = b [ k ] ;
}

void mergesort ( int stanga , int dreapta )
{
    int mid ;
    if( stanga < dreapta )
    {
        mid = ( stanga + dreapta ) / 2;
        mergesort ( stanga , mid ) ;
        mergesort ( mid + 1 , dreapta );
        merge ( stanga , mid , dreapta ) ;
    }
}
int main ()
{
    FILE *fin , *fout ;
    fin = fopen ( "algsort.in" , "rt" ) ;
    fout = fopen ( "algsort.out" , "wt" ) ;

    fscanf ( fin , "%d " , &N ) ;
    for ( int i = 1 ; i <= N ; i++ )
        fscanf ( fin , "%d" , a + i ) ;

    mergesort ( 1 , N ) ;
    for ( int i = 1 ; i <= N ; i++ )
        fprintf ( fout , "%d " , a [ i ] ) ;

    fclose ( fin ) ;
    fclose ( fout ) ;
    return 0 ;
}