Cod sursa(job #460512)

Utilizator BitOneSAlexandru BitOne Data 2 iunie 2010 20:36:49
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdlib>
#include <fstream>
#include <iterator>
#define Nmax 500111

/*
 *
 */
using namespace std;
int N;
int v[Nmax], v2[Nmax];
const int p10[]={ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 1 };
inline bool RadixSort( int k )
{
    bool ok;
    int i, c;
    int CCount[10]={0}, idx[10]={0};
    for( i=1; i <= N; ++i )
        ++CCount[  ( v[i]/p10[k-1] )%10 ];
    idx[0]=1;
    for( i=1; i <= 9; ++i )
        idx[i]=idx[i-1]+CCount[i-1];
    for( i=1; i <= N; ++i )
    {
        c=( v[i]/p10[k-1] )%10;
        v2[ idx[c] ]=v[i];
        ++idx[c];
    }
    v[1]=v2[1];
    for( i=2; i <= N; ++i )
    {
        v[i]=v2[i];
        if( v[i] < v[i-1] )
            ok=false;
    }
    return ok;
}
int main( void )
{
    ifstream in( "algsort.in" );
    in>>N;
    copy( istream_iterator< int >( in ), istream_iterator< int >(), v+1 );
    for( int k=1; RadixSort( k ); ++k );
    ofstream out( "algsort.out" );
    copy( v+1, v+N+1, ostream_iterator< int >( out, " " ) );
    out<<'\n';
    return EXIT_SUCCESS;
}