Cod sursa(job #460481)
#include <cstdlib>
#include <fstream>
#include <iterator>
#define Nmax 500111
/*
*
*/
using namespace std;
int v[Nmax], w[Nmax];
inline void MegaSort( int left, int right )
{
if( 1 == right-left )
{
if( v[left] > v[right] )
swap( v[right], v[left] );
return;
}
if( left < right )
{
int middle=left+(right-left)/2, i, j, k;
MegaSort( left, middle );
MegaSort( middle+1, right );
for( i=left, j=middle+1, k=1; i <= middle && j <= right; ++k )
{
if( v[i] <= v[j] )
w[k]=v[i], ++i;
else w[k]=v[j], ++j;
}
for( ; i <= middle; ++k, ++i )
w[k]=v[i];
for( ; j <= right; ++k, ++j )
w[k]=v[j];
for( i=left, j=1; j < k; ++j, ++i )
v[i]=w[j];
}
}
int main( void )
{
int N;
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;
}