Pagini recente » Cod sursa (job #1455889) | Cod sursa (job #2878231) | Cod sursa (job #1730598) | Cod sursa (job #2574700) | Cod sursa (job #2649510)
#include <cstdio>
#include <vector>
using namespace std;
int numbers[10000000];
int buckets[10000000];
int main () {
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
int n, a, b, c, maxNo;
int counts[10];
scanf("%d", &n);
scanf("%d%d%d", &a, &b, &c);
numbers[0] = b;
maxNo = b;
for(int i=1; i<n; ++i) {
numbers[i] = (a * numbers[i-1] + b) % c;
if (numbers[i] > maxNo)
maxNo = numbers[i];
}
int current_digit = 1, current;
while(maxNo / current_digit) {
for(int i=0; i<=9; ++i)
counts[i] = 0;
for(int i=0; i<n; ++i) {
current = numbers[i] / current_digit % 10;
++counts[current];
}
for(int i=1; i<=9; ++i)
counts[i] += counts[i-1];
for(int i=n-1; i>=0; --i) {
current = numbers[i] / current_digit % 10;
buckets[counts[current] - 1] = numbers[i];
--counts[current];
}
for(int i=0; i<n; ++i)
numbers[i] = buckets[i];
current_digit *= 10;
}
for(int i=0; i<n; i+= 10)
printf("%d ", numbers[i]);
return 0;
}