Pagini recente » Cod sursa (job #2439751) | Profil croi5040 | Rating Blanar George (georgeblanar) | Monitorul de evaluare | Cod sursa (job #758114)
Cod sursa(job #758114)
#include <fstream>
#include <cstdlib>
#include <iterator>
#include <algorithm>
#define N_MAX 500011
using namespace std;
int N;
int v[N_MAX], w[N_MAX];
inline void _swap( int& x, int& y ) { int aux=x; x=y; y=aux; }
inline void MegaSort( int left, int right )
{
if( right == left )
return;
if( 1 == right-left )
{
if( v[right] < v[left] )
_swap( v[right], v[left] );
return;
}
int middle=(left+right)/2, xLeft, xMiddle, l=0;
MegaSort( left, middle );
MegaSort( middle+1, right );
for( xLeft=left, xMiddle=middle+1; xLeft <= middle && xMiddle <= right; )
if( v[xLeft] <= v[xMiddle] )
w[++l]=v[xLeft], ++xLeft;
else w[++l]=v[xMiddle], ++xMiddle;
if( xLeft <= middle )
for( ; xLeft <= middle; ++xLeft )
w[++l]=v[xLeft];
if( xMiddle <= right )
for( ; xMiddle <= right; ++xMiddle )
w[++l]=v[xMiddle];
for( xLeft=left, xMiddle=1; xLeft <= right; ++xLeft, ++xMiddle )
v[xLeft]=w[xMiddle];
}
int main( void )
{
ifstream in( "algsort.in" );
in>>N;
copy( istream_iterator<int>(in), istream_iterator<int>(), v+1 );
MegaSort( 1, N );
ofstream out( "algsort.out" );
copy( v+1, v+N+1, ostream_iterator<int>( out, " " ) );
out<<'\n';
return EXIT_SUCCESS;
}