Pagini recente » Cod sursa (job #77776) | Cod sursa (job #2755010) | Cod sursa (job #468530) | Cod sursa (job #705334) | Cod sursa (job #659099)
Cod sursa(job #659099)
#include <cstdio>
#include <vector>
#include <iterator>
using namespace std;
const char infile[] = "algsort.in";
const char outfile[] = "algsort.out";
const int MAX_N = 500002;
int x[ MAX_N ];
int N;
void read(){
FILE *f;
f = fopen( infile, "rt" );
fscanf( f, "%d", &N );
for( int i = 1; i <= N; ++i )
fscanf( f, "%d", &x[ i ] );
}
void radix_sort()
{
int max = -1, pow10 = 1, bucket_num, count, i;
vector < int > buckets[ 12 ];
vector < int > :: iterator bucket;
for( i = 1; i <= N; ++i )
if( x[ i ] > max )
max = x[ i ];
for( ; max != 0; max /= 10, pow10 *= 10 ){
for( i = 1; i <= N ; ++i ){
bucket_num = ( x[ i ] / pow10 ) % 10;
buckets[ bucket_num ].push_back( x[ i ] );
}
count = 0;
for( bucket_num = 0; bucket_num < 10; ++bucket_num ){
for( bucket = buckets[ bucket_num ].begin(); bucket != buckets[ bucket_num ].end(); ++bucket )
x[ ++count ] = *bucket;
buckets[ bucket_num ].erase( buckets[ bucket_num].begin(), buckets[ bucket_num ].end() );
}
}
}
void write(){
FILE *g;
g = fopen( outfile, "wt" );
int i;
for( i = 1; i <= N; ++i )
fprintf( g, "%d\n", x[ i ] );
}
int main(){
read();
radix_sort();
write();
return 0;
}