Pagini recente » Cod sursa (job #1327808) | Cod sursa (job #717094) | Cod sursa (job #2945701) | Cod sursa (job #1432534) | Cod sursa (job #2439193)
#include <iostream>
#include <fstream>
using namespace std;
int max(int vec[], int n){
int max = vec[0];
for(int i = 1; i < n; i++){
if(vec[i] > max){
max = vec[i];
}
}
return max;
}
void countSort(int vec[], int n, int exp){
int count[10] = {0};
int output[n];
for(int i = 0; i < n; i++){
count[(vec[i]/exp)%10]++;
}
for(int i = 1; i < 10; i++){
count[i] += count[i-1];
}
for(int i = n - 1; i >= 0; i--){
output[count[(vec[i]/exp)%10]-1] = vec[i];
count[(vec[i]/exp)%10]--;
}
for(int i = 0; i < n; i++){
vec[i] = output[i];
}
}
void radix(int vec[], int n){
int maxim = max(vec, n);
for(int exp = 1; maxim/exp > 0; exp *= 10){
countSort(vec, n, exp);
}
}
int main(){
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int n, vec[10000000];
int a, b, c;
fin >> n >> a >> b >> c;
vec[0] = b;
for(int i = 1; i < n; i++){
vec[i] = (a * vec[i-1] + b) % c;
}
radix(vec, n);
for(int i = 0; i < n; i += 10){
fout << vec[i] <<" ";
}
fout <<'\n';
return 0;
}