Pagini recente » Cod sursa (job #1147807) | Cod sursa (job #551228) | Cod sursa (job #1097912) | Cod sursa (job #721084) | Cod sursa (job #1679610)
#include<cstdio>
#define MASK 255
int n,i,j,vmax,p,nr,v[10001000],x[10001000],y[300];
long long a,b,c,s;
FILE *f,*g;
int maxim(int a,int b){
if(a>b)
return a;
return b;
}
int main(){
f=fopen("radixsort.in","r");
g=fopen("radixsort.out","w");
fscanf(f,"%d%d%d%d",&n,&a,&b,&c);
v[1] = b;
for(i=2;i<=n;i++){
s = ( a * v[ i - 1 ] + b ) % c;
v[i] = s;
vmax = maxim( vmax , v[i] );
}
while( vmax ){
nr++;
vmax /= 256;
}
p = 0;
while(nr--){
for(i=0;i<=260;i++){
y[i] = 0;
}
for(i=1;i<=n;i++){
y[ ( v[i] >> p ) & MASK ]++;
}
for(i=1;i<=260;i++){
y[i] += y[ i - 1 ];
}
for(i=n;i>=1;i--){
x[ y[ (v[i] >> p) & MASK ] -- ] = v[i];
}
for(i=1;i<=n;i++){
v[i] = x[i];
x[i] = 0;
}
p += 8;
}
for(i=1;i<=n;i+=10){
fprintf(g,"%d ",v[i]);
}
fclose(f);
fclose(g);
return 0;
}