Cod sursa(job #460512)
#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;
}