Pagini recente » Cod sursa (job #2567991) | Cod sursa (job #2255305) | Cod sursa (job #1587865) | Cod sursa (job #3126671) | Cod sursa (job #1520273)
#include <cstdio>
using namespace std;
FILE *f = fopen ( "algsort.in" , "r" ) , *g = fopen ( "algsort.out" , "w" );
const int MAX = 500005;
int Size , myInts [ MAX ] , i , aux [ MAX ];
void read()
{
fscanf ( f , "%d" , &Size );
for ( i = 0 ; i < Size ; i ++ )
fscanf ( f , "%d" , &myInts [ i ] );
}
void print()
{
for ( i = 0 ; i < Size ; i ++ )
fprintf ( g , "%d " , myInts [ i ] );
}
void Union ( int left1 , int right1 , int left2 , int right2 , int targetL , int targetR )
{
int i = left1 , j = left2 , size = 0;
while ( i < right1 && j < right2 )
if ( myInts [ i ] < myInts [ j ] )
aux [ size ++ ] = myInts [ i ++ ];
else
aux [ size ++ ] = myInts [ j ++ ];
while ( i < right1 )
aux [ size ++ ] = myInts [ i ++ ];
while ( j < right2 )
aux [ size ++ ] = myInts [ j ++ ];
for ( i = targetL ; i < targetR ; i ++ )
myInts [ i ] = aux [ i - targetL ];
}
void mergeSort ( int left , int right )
{
if ( left + 1 < right )
{
int mid = ( left + right ) / 2;
mergeSort ( left , mid );
mergeSort ( mid , right );
Union ( left , mid , mid , right , left , right );
}
}
int main()
{
read();
mergeSort ( 0 , Size );
print();
return 0;
}