Pagini recente » Cod sursa (job #585015) | Cod sursa (job #2878923) | Cod sursa (job #433750) | Cod sursa (job #600570) | Cod sursa (job #2694290)
#include <stdio.h>
#include <vector>
#define MAX 10000000
#define MAX_BITS 32
#define BITS_PER_STEP 8
const int BASE = 1 << BITS_PER_STEP;
std::vector<int> bucket[ BASE ];
int freq[ BASE ], ind[ BASE ];
const int MASK = BASE - 1;
int v[ MAX ], rez[ MAX ];
void radixsort( int v[], int aux[], int n, int bits ){
if( bits == MAX_BITS )
return;
int i;
for( i = 0; i < BASE; i++ )
freq[ i ] = 0;
for( i = 0; i < n; i++ )
++freq[ v[ i ] >> bits & MASK ];
ind[ 0 ] = 0;
for( i = 1; i < BASE; i++ )
ind[ i ] = freq[ i - 1 ] + ind[ i - 1 ];
for( i = 0; i < n; i++ )
aux[ ind[ v[ i ] >> bits & MASK ]++ ] = v[ i ];
radixsort( aux, v, n, bits + BITS_PER_STEP );
}
int main()
{
int n, A, B, C;
FILE *fin = fopen( "radixsort.in", "r" );
fscanf( fin, "%d %d %d %d", &n, &A, &B, &C );
fclose( fin );
v[ 0 ] = B;
for( int i = 1; i < n; i++ )
v[ i ] = ( ( long long )A * v[ i - 1 ] + B ) % C;
radixsort( v, rez, n, 0 );
FILE *fout = fopen( "radixsort.out", "w" );
for( int i = 0; i < n; i += 10 )
fprintf( fout, "%d ", v[ i ] );
fclose( fout );
return 0;
}