Cod sursa(job #854343)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 13 ianuarie 2013 13:23:27
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<stdio.h>
//merge sort
long a [ 500007 ] , aux [ 500007 ] , k , n ;
void schimb( long st , long dr)
{
    long med = ( st + dr ) >> 1 , x = st , y = med + 1 ;
    k = st - 1 ;
    while ( x <= med && y <= dr )
    {
        if ( a [ x ] <= a [ y ] )
        {
            aux [ ++ k ] = a [ x ] ;
            ++ x ;
        }
        else
        {
            aux [ ++ k ] = a [ y ] ;
            ++ y ;
        }
    }
    while ( x <= med )
        aux [ ++ k ] = a [ x ++ ] ;
    while ( y <= dr )
        aux [ ++ k ] = a [ y ++ ] ;
    for ( long i = st ; i <= dr ; ++ i )
        a [ i ] = aux [ i ] ;
}
void merge_sort ( long st, long dr )
{
    if ( st == dr )
        return ;
    int med = ( st + dr ) >> 1 ;
    merge_sort ( st , med ) ;
    merge_sort ( med + 1 , dr ) ;
    schimb ( st , dr ) ;
}
int main ( )
{
    freopen ( "algsort.in" , "r" , stdin ) ;
    freopen ( "algsort.out" , "w" , stdout ) ;
    scanf ( "%ld" , & n ) ;
    for ( long i = 1 ; i <= n ; ++ i )
        scanf ( "%ld" , & a [ i ] ) ;
    merge_sort ( 1 , n ) ;
    for ( long i = 1 ; i <= n ; ++ i )
        printf ( "%ld " , a [ i ] ) ;
    return 0 ;
}