Pagini recente » Cod sursa (job #1736547) | Cod sursa (job #2244783) | Cod sursa (job #959747) | Cod sursa (job #829278) | Cod sursa (job #2429571)
#include <iostream>
#define NMAX 10000000
#define BITMAX 31
#define BITS 4
#define VALMAX 1 << BITS
using namespace std;
unsigned int v [ NMAX ] ;
unsigned int vc [ NMAX ] ; /// tinem indicii
int f [ VALMAX + 1 ] ;
int mask = ((1 << BITS) - 1 ) ;
FILE *fin, *fout ;
void sortbybit (int n, int bt ) {
int byte, i, put ;
put = bt * (BITS-1) ;
for (i = 1 ; i <= n ; i++ ) {
byte = ( ( v[i] >> put ) & mask ) ;
f[byte]++;
}
for (i = 1 ; i < VALMAX ; i++ )
f[i] += f[i-1] ;
for (i = n ; i >= 1 ; i-- ) {
byte = ( ( v[i] >> put ) & mask ) ;
vc[f[byte]--] = v[i] ;
}
for (i = 0 ; i < VALMAX ; i++ )
f[i] = 0 ;
for (i = 1 ; i <= n ; i++ ) {
v[i] = vc[i] ;
}
}
int main() {
fin = fopen ("radixsort.in", "r" ) ;
fout = fopen ("radixsort.out", "w" ) ;
int n, i, a, b, c ;
fscanf (fin, "%d%d%d%d", &n, &a, &b, &c ) ;
for (i = 1 ; i <= n ; i++ )
v[i] = (1LL * v[i-1] * a + b ) % c ;
for (i = 0 ; i <= BITMAX / BITS ; i++ )
sortbybit (n, i) ;
for (i = 1 ; i <= n ; i+=10)
fprintf (fout, "%d ", v[i] ) ;
return 0;
}