Pagini recente » Cod sursa (job #869437) | Cod sursa (job #1739697) | Cod sursa (job #1972161) | Cod sursa (job #989265) | Cod sursa (job #3313372)
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <limits.h>
const uint32_t MAX_N = 10000000;
uint32_t vec[MAX_N], temp[MAX_N];
int main() {
std::ifstream fin("radixsort.in");
std::ofstream fout("radixsort.out");
uint32_t n, a, b, c;
fin >> n >> a >> b >> c;
vec[0] = b;
for(uint32_t i = 1; i != n; ++i) {
uint64_t res = (uint64_t)a * vec[i - 1] + b;
res %= c;
vec[i] = (uint32_t)res;
}
for(uint32_t bit = 0; bit != 32; ++bit) {
uint32_t frec[256];
for(uint32_t i = 0; i != 256; ++i)
frec[i] = 0;
for(uint32_t i = 0; i != n; ++i) {
uint32_t word = (vec[i] >> bit) & 255;
++frec[word];
}
frec[255] = n - frec[255];
for(uint32_t i = 254; i != UINT32_MAX; --i)
frec[i] = frec[i + 1] - frec[i];
for(uint32_t i = 0; i != n; ++i) {
uint32_t word = (vec[i] >> bit) & 255;
temp[frec[word]++] = vec[i];
}
for(uint32_t i = 0; i != n; ++i)
vec[i] = temp[i];
}
for(uint32_t i = 0; i < n; i += 10)
fout << vec[i] << ' ';
fin.close();
fout.close();
return 0;
}