Pagini recente » Istoria paginii utilizator/steffz96 | Cod sursa (job #2936997) | Cod sursa (job #2648788)
#include <iostream>
#include <fstream>
using namespace std;
const long MAXN = 1e7+1;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
long long n, a, b, c, maxi = 0;
long long v[MAXN];
void count_sort(int pow){
long long output[n];
long long i, count[10] = {0};
for (i = 0; i < n; i++)
count[(v[i]/pow)%10 ]++;
for (i = 1; i < 10; i++)
count[i] += count[i - 1];
for (i = n - 1; i >= 0; i--){
output[count[(v[i]/pow)%10 ]-1] = v[i];
count[(v[i]/pow)%10]--;
}
for (i = 0; i < n; i++)
v[i] = output[i];
}
void radix_sort(){
for(int pow = 1;maxi/pow>0;pow*=10)
count_sort(pow);
}
void generate_num(){
maxi = v[0] = b;
for(int i=1;i<n;i++){
v[i] = (a*v[i-1]+b)%c;
maxi = max(maxi, v[i]);
}
}
int main() {
fin>>n>>a>>b>>c;
generate_num();
radix_sort();
for(int i=0;i<n;i+=10)
fout<<v[i]<<' ';
return 0;
}