Pagini recente » Cod sursa (job #2664353) | Cod sursa (job #761118) | Cod sursa (job #932190) | Cod sursa (job #343943) | Cod sursa (job #1474062)
#include <stdio.h>
#include <fstream>
#include <algorithm>
#define NMAX 10000005
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
int N, A, B, C;
int input[NMAX], output[NMAX];
void read(){
in >> N >> A >> B >> C;
input[1] = B;
for(int i = 2; i <= N; ++i)
input[i] = (1LL * A * input[i-1] + B) % C;
}
int maxi(){
int m = input[1];
for(int i = 2; i <= N; ++i)
if(input[i] > m)
m = input[i];
return m;
}
void CountingSort(int b){
int count[10] = {0};
for(int i = 1; i < N+1; ++i)
++count[(input[i]/b)%10];
for(int i = 1; i < 10; ++i)
count[i] += count[i-1];
for(int i = N; i > 0; --i){
output[count[(input[i]/b)%10] - 1] = input[i];
--count[(input[i]/b)%10];
}
for(int i = 1; i < N+1; ++i){
input[i] = output[i-1];
output[i-1] = 0;
}
}
void RadixSort(){
int max = maxi();
for(int b = 1; max/b > 0; b = 1LL * b * 10)
CountingSort(b);
for(int i = 1; i < N+1; i += 10)
out << input[i] << ' ';
out << "\n";
}
int main(){
read();
RadixSort();
return 0;
}