Pagini recente » Cod sursa (job #459478) | Cod sursa (job #439694) | Cod sursa (job #2349465) | Cod sursa (job #512477) | Cod sursa (job #456379)
Cod sursa(job #456379)
/*
* 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;
}