Pagini recente » Cod sursa (job #65205) | Cod sursa (job #917553) | Cod sursa (job #3004708) | Cod sursa (job #2708485) | Cod sursa (job #2676245)
#include <stdio.h>
#include <string.h>
#define MAX_N 10000000
#define MAX_BITS 32
#define BITS_PER_STEP 8
const int BASE = (1 << BITS_PER_STEP);
const int MASK = BASE - 1;
int v1[MAX_N], v2[MAX_N];
int freq[BASE], ind[BASE];
void sort(int v[], int aux[], int n, int bits) {
if ( bits == MAX_BITS )
return;
memset(freq, 0, sizeof(freq));
int i;
for ( i = 0; i < n; i++ )
++freq[v[i] >> bits & MASK];
ind[0] = 0;
for ( i = 1; i < BASE; i++ )
ind[i] = ind[i - 1] + freq[i - 1];
for ( i = 0; i < n; ++i )
aux[ind[v[i] >> bits & MASK]++] = v[i];
sort ( aux, v, n, bits + BITS_PER_STEP );
}
int main() {
FILE *fin, *fout;
int n, a, b, c, i;
fin = fopen( "radixsort.in", "r" );
fscanf ( fin, "%d%d%d%d", &n, &a, &b, &c );
v1[0] = b;
for ( i = 1; i < n; i++ )
v1[i] = ( (long long) v1[i - 1] * a + b ) % c;
fclose ( fin );
sort ( v1, v2, n, 0 );
fout = fopen( "radixsort.out", "w" );
for ( i = 0; i < n; i += 10 )
fprintf ( fout, "%d ", v1[i] );
fclose ( fout );
return 0;
}