Pagini recente » Cod sursa (job #1913134) | Cod sursa (job #1353078) | Cod sursa (job #1315727) | Cod sursa (job #2701571) | Cod sursa (job #2910820)
// This program was written by Mircea Rebengiuc
// on 21.06.2022
// for problem radixsort
#include <stdio.h>
#include <ctype.h>
#define MAXN 10000000
#define NBUCKET 256
#define LBUCKET 8
#define NBITS 31
#define byte unsigned char
int v[2][MAXN]; // ~80MB
int freq[NBUCKET];
FILE *fin, *fout;
int main(){
fin = fopen( "radixsort.in", "r" );
fout = fopen( "radixsort.out", "w" );
int a, c;
int n, i, j, x, t;
t = 0;
fscanf( fin, "%d%d%d%d", &n, &a, v[0], &c );
for( i = 1 ; i < n ; i++ )
v[0][i] = (((long long)a) * v[0][i - 1] + v[0][0]) % c;
for( x = 0 ; x < NBITS ; x += LBUCKET ){
for( i = 0 ; i < NBUCKET ; i++ )
freq[i] = 0;
for( i = 0 ; i < n ; i++ )
freq[(v[t][i] >> x) & (NBUCKET - 1)]++;
if( freq[0] < n ){
for( i = 1 ; i < NBUCKET ; i++ )
freq[i] += freq[i - 1];
for( i = NBUCKET - 1 ; i ; i-- )
freq[i] = freq[i - 1];
freq[0] = 0;
for( i = 0 ; i < n ; i++ )
v[t ^ 1][freq[(v[t][i] >> x) & (NBUCKET - 1)]++] = v[t][i];
t ^= 1;
}
}
for( i = 0 ; i < n ; i += 10 )
fprintf( fout, "%d ", v[t][i] );
fputc( '\n', fout );
fclose( fin );
fclose( fout );
return 0;
}