Pagini recente » Cod sursa (job #3290732) | Cod sursa (job #567497) | Cod sursa (job #2445539) | Cod sursa (job #2844950) | Cod sursa (job #1881571)
#include <cstdio>
#include <queue>
#define MAXN 10000000
#define RADIX 256
#define getbyte(x) (((x)>>byte)&(RADIX-1))
using namespace std;
unsigned int v[MAXN];
queue <unsigned int> lst[RADIX];
inline void radix(int byte, int n){
for(int i=0; i<n; i++)
lst[getbyte(v[i])].push(v[i]);
int nr=0;
for(int i=0; i<RADIX; i++)
while(lst[i].empty()==0){
v[nr++]=lst[i].front();
lst[i].pop();
}
}
int main()
{
FILE *fin, *fout;
int n, i, a, b, c;
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]=(1LL*a*v[i-1]+b)%c;
for(i=0; i<32; i+=8)
radix(i, n);
fout=fopen("radixsort.out", "w");
for(i=0; i<n; i+=10)
fprintf(fout, "%d ", v[i]);
fprintf(fout, "\n");
return 0;
}