Pagini recente » Cod sursa (job #250714) | Cod sursa (job #3248816) | Cod sursa (job #2783554) | Cod sursa (job #729441) | Cod sursa (job #650637)
Cod sursa(job #650637)
#include <cstdio>
#include <cstdlib>
using namespace std ;
struct Nod{
unsigned int val ;
Nod* link ;
} ;
const int MAXN = 500000 ;
Nod buffer[ MAXN ] ;
Nod* distrib[ 1 << 16 ] ;
unsigned int input[ MAXN ] ;
int N ;
inline unsigned int getO( unsigned int &a , unsigned int &oct ){
return ( a >> oct ) & 0xf ;
}
void sort( unsigned int oct ){
oct *= 4 ;
for( int i = N-1 ; i >= 0 ; --i ){
buffer[ i ].val = input[ i ] ;
buffer[ i ].link = distrib[ getO( input[ i ] , oct ) ] ;
distrib[ getO( input[ i ] , oct ) ] = &buffer[ i ] ;
}
int k = -1 ;
for( int i = 0 ; i < 65536 ; ++i ){
while( distrib[ i ] ){
input[ ++k ] = distrib[ i ]->val ;
distrib[ i ] = distrib[ i ]->link ;
}
}
}
int main( ) {
freopen( "algsort.in" , "r" , stdin ) ;
freopen( "algsort.out" , "w" , stdout ) ;
scanf( "%d" , &N ) ;
for( int i = 0 ; i < N ; ++i )
scanf( "%d" , &input[ i ] ) ;
for( int i = 0 ; i < 8 ; ++i )
sort( i ) ;
for( int i = 0 ; i < N ; ++i )
printf( "%d " , input[ i ] ) ;
printf( "\n" ) ;
}