Pagini recente » Cod sursa (job #382366) | Cod sursa (job #2472294) | Cod sursa (job #416975) | Cod sursa (job #20608) | Cod sursa (job #1014826)
#include <cstdio>
#include <cassert>
#include <vector>
using namespace std;
#define MAX_N 500000
#define BASE 16
int n, v[MAX_N];
vector < int > a[BASE];
void read( FILE *fin ) {
assert( fscanf( fin, "%d", &n ) == 1 );
for ( int i = 0; i < n; ++i )
assert( fscanf( fin, "%d", &v[i] ) == 1 );
}
void write( FILE *fout ) {
for ( int i = 0; i < n; ++i )
fprintf( fout, "%d ", v[i] );
}
void radixs( int curr_byte ) {
if ( curr_byte == 8 )
return;
int i;
for ( i = 0; i < n; ++i )
a[ v[i] >> ( curr_byte << 2 ) & 15 ].push_back( v[i] );
i = 0;
for ( int digit = 0; digit < BASE; ++digit ) {
for ( vector < int > :: iterator it = a[digit].begin(); it != a[digit].end(); ++it )
v[i++] = *it;
a[digit].clear();
}
radixs( curr_byte + 1 );
}
int main() {
FILE *fin, *fout;
fin = fopen( "algsort.in", "r" );
read( fin );
fclose( fin );
radixs( 0 );
fout = fopen( "algsort.out", "w" );
write( fout );
fclose( fout );
}