Cod sursa(job #456379)

Utilizator alexandru92alexandru alexandru92 Data 15 mai 2010 14:03:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
/* 
 * File:   main.cpp
 * Author: virtualdemon
 *
 * Created on May 15, 2010, 9:35 AM
 */
#include <fstream>
#include <cstdlib>
#include <iterator>
#define Nmax 500011

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