Pagini recente » Cod sursa (job #1695401) | Cod sursa (job #2314146) | Cod sursa (job #1823123) | Cod sursa (job #2257548) | Cod sursa (job #3179151)
#include <cstring>
#include <fstream>
#include <iostream>
using namespace std;
#define rad 0xFF
#define dimensiune 8
#define bits sizeof(sir[0])
#define get_byte(x) ((x>>(byte * 8))&rad)
int num, sir[10000001];
void sort(int A[],int B[],int byte) {
int count[1<<dimensiune];
int ind[1<<dimensiune];
memset(count,0,sizeof(count));
for(int i=0;i<num;i++){
++count[get_byte(A[i])];
}
ind[0]=0;
for(int i = 1; i < 1<<dimensiune; i ++){
ind[i]=ind[i-1]+count[i-1];
}
for(int i = 0; i < num; i ++){
B[ind[get_byte(A[i])]++]=A[i];
}
}
void radis() {
int*poin=new int[num];
for(int i=0;i<bits;i++) {
if(i % 2 == 0){
sort(sir,poin,i);
}
else{
sort(poin,sir,i);
}
}
}
int main()
{
ifstream ci("radixsort.in");
ofstream cou("radixsort.out");
int a,b,c;
cin>>num>>a>>b>>c;
sir[0]=b%c;
for(int i=1;i<num;i++){
sir[i]=(1LL*a*sir[i-1]%c+b)%c;
}
radis();
for(int i=0;i<num;i+=10){
cout<< sir[i]<<" ";
}
return 0;
}