Pagini recente » Profil EugenStoica | Cod sursa (job #2210233) | Cod sursa (job #542601) | Cod sursa (job #2234236) | Cod sursa (job #2625449)
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");
int main() {
long long N, A, B, C;
fin >> N >> A >> B >> C;
vector <int> v(N);
v[0] = B;
for(int i = 1; i < N; ++i)
v[i] = (A * v[i-1] + B) % C;
const int exp = 8;
int base = (1 << exp);
vector <int> aparitii (base);
vector <int> output(N);
for (int shift = 0; shift < 32/exp; ++shift) {
for (int i = 0; i < N; ++i)
aparitii[(v[i] >> (exp*shift)) & (base-1)]++;
for (int i = 1; i < base; ++i)
aparitii[i] += aparitii[i-1];
for (int i = N - 1; i >= 0; --i) {
aparitii[(v[i] >> (exp*shift)) & (base-1)]--;
output[aparitii[(v[i] >> (exp*shift)) & (base-1)]] = v[i];
}
for (int i = 0; i < N; ++i)
v[i] = output[i];
for (int i = 0; i < base; ++i)
aparitii[i] = 0;
}
for (int i = 0; i < N; i+=10)
fout << output[i] << ' ';
return 0;
}