Cod sursa(job #439165)

Utilizator alexandru92alexandru alexandru92 Data 11 aprilie 2010 13:41:38
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
/* 
 * 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;
}