Pagini recente » Cod sursa (job #1917948) | Cod sursa (job #2640483) | Cod sursa (job #2434130) | Cod sursa (job #1373511) | Cod sursa (job #2484970)
#include <fstream>
#include <vector>
void countingSort(std::vector<int>& arr, int power, base) {
int *count = new int[base];
for (int i = 0; i < base; ++i) {
count[i] = 0;
}
for (auto x : arr) {
++count[(x / power) % base];
}
for (int i = 1; i < base; ++i) {
count[i] += count[i – 1];
}
std::vector<int> output;
output.resize(arr.size);
for (int i = arr.size() - 1; i >= 0; --i) {
output[count[arr[i] – 1]] = arr[i];
}
for (int i = 0; i < arr.size(); ++i) {
arr[i] = count[i];
}
}
void radixSort(std::vector<int>& arr, int base) {
int maxn = arr[0];
for (int i = 1; i < n; ++i) {
if (maxn < arr[i]) {
maxn = arr[i];
}
}
for (int power = 1; power <= maxn; power *= 10) {
countingSort(arr, power, base);
}
}
int main() {
ifstream in(“radixsort.in”);
ofstream out(“radixsort.out”);
int n, a, b, c;
in >> n >> a >> b >> c;
std::vector<int> arr;
arrr.push_back(b);
for (int i = 1; i < n; ++i) {
arr.push_back((a * arr[i – 1] + b) % c);
}
radixSort(arr, 10);
for (int i = 0; i < n; i += 10) {
out << arr[i];
}
return 0;
}