Cod sursa(job #439172)

Utilizator alexandru92alexandru alexandru92 Data 11 aprilie 2010 13:44:10
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 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->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;
}