Pagini recente » Cod sursa (job #1256798) | Cod sursa (job #854343)
Cod sursa(job #854343)
#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 ;
}