Pagini recente » Cod sursa (job #2950710) | Cod sursa (job #1652180) | Cod sursa (job #2573935) | Cod sursa (job #3271870) | Cod sursa (job #439165)
Cod sursa(job #439165)
/*
* File: main.cpp
* Author: VirtualDemon
*
* Created on April 11, 2010, 1:22 PM
*/
#include <vector>
#include <cstdlib>
#include <fstream>
#include <iterator>
/*
*
*/
using namespace std;
typedef vector< int > array;
inline void MegaSort( array& v )
{
int N=v.size();
if( N <= 1 )
return;
if( 2 == N )
{
if( v[0] > v[1] )
swap( v[0], v[1] );
return;
}
array v1, v2;
copy( v.begin(), v.begin()+N/2, back_inserter(v1) );
copy( v.begin()+N/2, v.end(), back_inserter(v2) );
MegaSort( v1 );
MegaSort( v2 );
int k, i, j, N1=v1.size(), N2=v2.size();
for( k=j=i=0; i < N1 && j < N2; ++k )
{
if( v1[i] <= v2[j] )
{
v[k]=v1[i];
++i;
}
else {
v[k]=v2[j];
++j;
}
}
for( ; i < N1; ++i, ++k )
v[k]=v1[i];
for( ; j < N2; ++j, ++k )
v[k]=v2[j];
}
int main( void )
{
int N;
array v;
ifstream in( "algsort.in" );
in>>N;
copy( istream_iterator<int>(in), istream_iterator<int>(), back_inserter(v) );
MegaSort( v );
ofstream out( "algsort.out" );
copy( v.begin(), v.end(), ostream_iterator<int>( out, " " ) );
return EXIT_SUCCESS;
}