Cod sursa(job #460481)

Utilizator BitOneSAlexandru BitOne Data 2 iunie 2010 19:36:10
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#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;
}