Pagini recente » Cod sursa (job #2765332) | Cod sursa (job #236142) | Cod sursa (job #2503432) | Cod sursa (job #1775592) | Cod sursa (job #2606263)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
template<class T>
void radix_sort(std::vector<T> *v) {
const unsigned char full_byte = 0xFF;
const int max_byte_len = sizeof(T);
auto *helper = new std::vector<T>(v->size());
int counter[256];
for (int i = 0; i < max_byte_len; i++) {
memset(counter, 0, 256 * sizeof(int));
for (int j = 0; j < v->size(); j++) {
counter[(*v)[j] >> (i * 8) & full_byte]++;
}
for (int j = 1; j < 256; j++)
counter[j] += counter[j - 1];
for (int j = v->size() - 1; j >= 0; j--) {
(*helper)[--counter[(*v)[j] >> (i * 8) & full_byte]] = (*v)[j];
}
std::swap(helper, v);
}
delete helper;
}
int main() {
std::ifstream fin("radixsort.in");
int n, a, b, c;
fin >> n >> a >> b >> c;
std::vector<int> v(n);
v[0] = b % c;
for (int i = 1; i < n; i++)
v[i] = (a * v[i - 1] + b) % c;
radix_sort(&v);
std::ofstream fout("radixsort.out");
for (int i = 0; i < n; i += 10)
fout << v[i] << ' ';
}