Pagini recente » Cod sursa (job #139000) | Cod sursa (job #2461972) | Cod sursa (job #1740803) | Cod sursa (job #464787) | Cod sursa (job #439172)
Cod sursa(job #439172)
/*
* 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->at(0) > v->at(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;
}