Pagini recente » Cod sursa (job #2325238) | Cod sursa (job #1340517) | Cod sursa (job #2816738) | Cod sursa (job #2884030) | Cod sursa (job #2303657)
#include <fstream>
#include <cstring>
#define N_MAX 10000005
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
int N;
int a[N_MAX], sol[N_MAX];
void citeste() {
int A, B, C;
in >> N >> A >> B >> C;
a[1] = B;
for (int i { 2 }; i <= N; ++i)
a[i] = (A * a[i - 1] + B) % C;
}
void counting_sort(int64_t ord) {
int f[15] = {};
for (int i { 1 }; i <= N; ++i)
++f[a[i] / ord % 10];
for (int i { 1 }; i < 10; ++i)
f[i] += f[i - 1];
for (int i { N }; i; --i) {
int poz = a[i] / ord % 10;
sol[f[poz]--] = a[i];
}
memcpy(a, sol, sizeof(int) * (N + 5));
}
void radix_sort() {
int maxim { *max_element(a + 1, a + 1 + N) };
for (int64_t p10 { 1 }; maxim / p10; p10 *= 10)
counting_sort(p10);
}
void afiseaza() {
for (int i { 1 }; i <= N; i += 10)
out << a[i] << ' ';
}
int main() {
citeste();
radix_sort();
afiseaza();
}