Pagini recente » Cod sursa (job #1219581) | Cod sursa (job #1372358) | Cod sursa (job #628762) | Cod sursa (job #1077396) | Cod sursa (job #856826)
Cod sursa(job #856826)
#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 ;
}