Pagini recente » Cod sursa (job #2673948) | Cod sursa (job #865786) | Cod sursa (job #2374853) | Cod sursa (job #1244279) | Cod sursa (job #2679784)
#include <stdio.h>
#include <string.h>
#define MAX_N 10000000
#define MAX_B 32
#define GRUP_B 16
#define MASK 65535
int v1[MAX_N], v2[MAX_N], f[MASK + 1], ind[MASK + 1];
void sort(int v[], int aux[], int n, int b ) {
int i;
if ( b == MAX_B )
return;
memset( f, 0, sizeof( f ) );
for ( i = 0; i < n; i++ )
f[v[i] >> b & MASK]++;
ind[0] = 0;
for ( i = 1; i <= MASK; i++ )
ind[i] = ind[i - 1] + f[i - 1];
for (i = 0; i < n; ++i)
aux[ind[v[i] >> b & MASK]++] = v[i];
sort( aux, v, n, b + GRUP_B );
}
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 );
fclose( fin );
v1[0] = b;
for ( i = 1; i < n; i++ )
v1[i] = ((long long)a * v1[i - 1] + b) % c;
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;
}