Pagini recente » Cod sursa (job #2699334) | Cod sursa (job #919800) | Cod sursa (job #667644) | Cod sursa (job #1849347) | Cod sursa (job #522205)
Cod sursa(job #522205)
#include <cstdio>
using namespace std ;
const int MAXN = 500001 ;
int Sir [ MAXN ] , Aux [ MAXN ] ;
void citireSir ( int ) ;
void mergeSort ( int , int ) ;
void afisareSir ( int ) ;
int main ( )
{
freopen ( "algsort.in" , "r" , stdin ) ;
freopen ( "algsort.out" , "w" , stdout ) ;
int sirSize ;
scanf ( "%d" , &sirSize ) ;
citireSir ( sirSize ) ;
mergeSort ( 0 , sirSize - 1 ) ;
afisareSir ( sirSize ) ;
return 0 ;
}
void citireSir ( int N )
{
for ( int i = 0 ; i < N ; ++i )
scanf ( "%d" , &Sir [ i ] ) ;
return ;
}
void mergeSort ( int St , int Dr )
{
if ( Dr - St < 2 )
{
if ( Sir [ St ] > Sir [ Dr ] )
{
Sir [ St ] ^= Sir [ Dr ] ;
Sir [ Dr ] ^= Sir [ St ] ;
Sir [ St ] ^= Sir [ Dr ] ;
}
return ;
}
int mid = ( St + Dr ) >> 1 ;
mergeSort ( St , mid ) ;
mergeSort ( mid + 1 , Dr ) ;
int k = St , l = mid + 1 , m = St ;
while ( ( k <= mid ) && ( l <= Dr ) )
( Sir [ k ] < Sir [ l ] ) ? ( Aux [ m++ ] = Sir [ k++ ] ) : ( Aux [ m++ ] = Sir [ l++ ] ) ;
while ( k <= mid )
Aux [ m++ ] = Sir [ k++ ] ;
while ( l <= Dr )
Aux [ m++ ] = Sir [ l++ ] ;
for ( k = St ; k<= Dr ; ++k )
Sir [ k ] = Aux [ k ] ;
return ;
}
void afisareSir ( int N )
{
for ( int i = 0 ; i < N ; ++i )
printf ( "%d " , Sir [ i ] ) ;
printf ( "\n" ) ;
return ;
}