Pagini recente » Cod sursa (job #1056383) | Cod sursa (job #2459197) | Cod sursa (job #1022983) | Cod sursa (job #2881170) | Cod sursa (job #650623)
Cod sursa(job #650623)
#include <cstdio>
#include <cstdlib>
using namespace std ;
struct Nod{
unsigned int val ;
Nod* link ;
} ;
const int MAXN = 500000 ;
Nod buffer[ MAXN ] ;
Nod* distrib[ 1 << 8 ] ;
unsigned int input[ MAXN ] ;
int N ;
inline unsigned int getO( unsigned int &a , int &oct ){
return ( a >> oct ) & 0xffff ;
}
void sort( int oct ){
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 < 256 ; ++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 < 4 ; ++i )
sort( i ) ;
for( int i = 0 ; i < N ; ++i )
printf( "%d " , input[ i ] ) ;
printf( "\n" ) ;
}