Pagini recente » Cod sursa (job #1986113) | Monitorul de evaluare | Cod sursa (job #2087655) | Cod sursa (job #2384866) | Cod sursa (job #2679398)
#include <stdio.h>
#define MAX_N 10000000
#define MAX_B 32
#define GRUP_B 16
#define MASK 65535
int v[MAX_N], v_aux[MAX_N], f[MASK + 1];
int main() {
FILE *fin, *fout;
int n, a, b, c, aux, t, bit, i;
fin = fopen( "radixsort.in", "r" );
fscanf( fin, "%d%d%d%d", &n, &a, &b, &c );
fclose( fin );
v[0] = b;
for ( i = 1; i < n; i++ )
v[i] = ((long long)a * v[i - 1] + b) % c;
for ( bit = 0; bit < MAX_B; bit += GRUP_B ) {
for( i = 0; i <= MASK; i++ )
f[i] = 0;
for ( i = 0; i < n; i++ )
f[v[i] >> bit & MASK]++;
t = f[0];
f[0] = 0;
for ( i = 1; i <= MASK; i++ ) {
aux = f[i];
f[i] = f[i - 1] + t;
t = aux;
}
for( i = 0; i < n; i++ )
v_aux[f[v[i] >> bit & MASK]++] = v[i];
for( i = 0; i < n; i++ )
v[i] = v_aux[i];
}
fout = fopen( "radixsort.out", "w" );
for ( i = 0; i < n; i += 10 )
fprintf( fout, "%d ", v[i] );
fclose( fout );
return 0;
}