Pagini recente » Cod sursa (job #3281075) | Cod sursa (job #3284431) | Cod sursa (job #240610) | Cod sursa (job #3259147) | Cod sursa (job #3259621)
#include <algorithm>
#include <stdio.h>
#define BIT 15
const int NR_BUCKKET = ( 1 << 16 );
const int MAX = ( 1 << 31 );
const int BAZ = ( 1 << BIT );
int freq[ NR_BUCKKET + 2 ];
int f[ NR_BUCKKET + 2 ];
int nr[ BAZ + 10 ];
int aux[ 500004 ];
int v[ 500004 ];
int bucket( int val ){
return val >> BIT;
}
/*void freq_sort( int left, int right, int biti ){
int val = biti * BAZ;
for( int i = left; i < right; i++ )
++nr[ aux[ i ] - val ];
for( int i = 0; i <= BAZ; i++ )
while( nr[ i ]-- )
aux[ left++ ] = i + val;
}*/
int main()
{
int n;
FILE *fin = fopen( "algsort.in", "r" );
fscanf( fin, "%d", &n );
for( int i = 0; i < n; i++ ){
fscanf( fin, "%d", &v[ i ] );
++freq[ bucket( v[ i ] ) ];
}
fclose( fin );
for( int i = 1; i < NR_BUCKKET; i++ )
f[ i ] = f[ i - 1 ] + freq[ i - 1 ];
for( int i = 0; i < n; i++ )
aux[ f[ bucket( v[ i ] ) ]++ ] = v[ i ];
//freq_sort( 0, freq[ 0 ], 0 );
std::sort( aux, aux + freq[ 0 ] );
for( int i = 1; i < NR_BUCKKET; i++ ){
freq[ i ] += freq[ i - 1 ];
//for( int j = 0; j < n; j++ )
// printf( "%d ", aux[ j ] );
// printf( "\n %d %d\n", freq[ i - 1 ], freq[ i ] );
std::sort( aux + freq[ i - 1 ], aux + freq[ i ] );
// freq_sort( freq[ i - 1 ], freq[ i ], i );
}
FILE *fout = fopen( "algsort.out", "w" );
for( int i = 0; i < n; i++ )
fprintf( fout, "%d ", aux[ i ] );
fclose( fout );
return 0;
}