Pagini recente » Cod sursa (job #1987671) | Cod sursa (job #223302) | Cod sursa (job #509180) | Cod sursa (job #576834) | Cod sursa (job #456348)
Cod sursa(job #456348)
/*
* File: main.cpp
* Author: virtualdemon
*
* Created on May 15, 2010, 9:35 AM
*/
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iterator>
#define Nmax 500011
/*
*
*/
using namespace std;
int N;
int v[Nmax], v2[Nmax];
const int p10[]={ 1, 10, 100, 1000, 10000, 100000 };
inline bool RSort( int k )
{
int i, c;
bool ok=false;
int d[10]={0}, idx[10]={0};
for( i=0; i < N; ++i )
++d[ (v[i]%p10[k])/p10[k-1] ];
for( i=1; i < 10; ++i )
idx[i]=idx[i-1]+d[i-1];
for( i=0; i < N; ++i )
{
c=(v[i]%p10[k])/p10[k-1];
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, maxim=0;
ifstream in( "algsort.in" );
in>>N;
for( i=0; i < N; ++i )
{
in>>v[i];
maxim=max( maxim, v[i] );
}
maxim=log10( (float)maxim )+1;
for( i=1; i <= maxim && RSort(i); ++i );
ofstream out( "algsort.out" );
copy( v, v+N, ostream_iterator<int>(out, " " ) );
out<<'\n';
return EXIT_SUCCESS;
}