Pagini recente » Cod sursa (job #1580466) | Cod sursa (job #2687024) | Cod sursa (job #2392445) | Cod sursa (job #2046476) | Cod sursa (job #2351491)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
long long n, a, b, c;
int v[10000000];
int r[10000000];
int x[256];
int *vp, *rp, *ch;
int digits;
void read() {
fin >> n >> a >> b >> c;
}
void generate() {
int mx = 0;
v[0] = b;
for (int i = 1; i < n; i++) {
v[i] = (a*v[i - 1] + b) % c;
if (v[i] > mx) mx = v[i];
}
vp = v;
rp = r;
while (mx != 0) {
digits++;
mx /= 16;
}
}
void sort2() {
int dv = 1, t;
for (int j = 1; j <= digits; j++) {
for (int i = n - 1; i >= 0; i--) {
x[(vp[i]/dv)%256]++;
}
for (int i = 1; i < 256; i++) {
x[i] += x[i - 1];
}
for (int i = n - 1; i >= 0; i--) {
t = (vp[i] / dv) % 256;
x[t]--;
rp[x[t]] = vp[i];
}
for (int i = 1; i < 256; i++) {
x[i] = 0;
}
dv *= 256;
ch = rp;
rp = vp;
vp = ch;
}
}
void write() {
for (int i = 0; i < n; i += 10) {
fout << vp[i] << " ";
}
}
int main() {
read();
generate();
sort2();
write();
return 0;
}