Pagini recente » Cod sursa (job #727329) | Cod sursa (job #1352661) | Cod sursa (job #1341649) | Cod sursa (job #37417) | Cod sursa (job #2649396)
#include <iostream>
#include <fstream>
#include <vector>
#define RADIX_SIZE 8
#define RADIX 0xFF
#define get_byte(x) ((x>>(byte*8))&RADIX)
using namespace std;
const long MAXN = 1e7+1;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int v[MAXN];
int n;
void count_sort(int A[], int B[], int byte){
int counter[1<<RADIX_SIZE];
int index[1<<RADIX_SIZE];
memset(counter, 0, sizeof(counter));
for(int i = 0; i < n; i ++)
++counter[get_byte(A[i])];
index[0] = 0;
for(int i = 1; i < 1<<RADIX_SIZE; i ++)
index[i] = index[i-1] + counter[i-1];
for(int i = 0; i < n; i ++)
B[index[get_byte(A[i])]++] = A[i];
}
void radix_sort(){
int *temp = new int[n];
for(int i=0;i<sizeof(v[0]);i++)
if(i%2==0)
count_sort(v, temp, i);
else
count_sort(temp, v, i);
}
void generate_num(int a, int b, int c){
v[0] = b;
int maxi = v[0];
for(int i=1;i<n;i++){
v[i] = (a*v[i-1]+b)%c;
if(v[i]>maxi) maxi = v[i];
}
}
int main() {
int a, b, c;
fin>>n>>a>>b>>c;
generate_num(a, b, c);
radix_sort();
for(int i=0;i<n;i+=10)
fout<<v[i]<<' ';
return 0;
}