Pagini recente » Cod sursa (job #2761403) | Borderou de evaluare (job #1341570) | Cod sursa (job #1540193) | Cod sursa (job #1865017) | Cod sursa (job #1800557)
#include <cstdio>
#include <cstring>
int n;
int v[10000100],v1[10000100],nrap[257];
FILE *g=fopen("radixsort.out","w");
void afish()
{
for(int i=1; i<=n; i+=10)
fprintf(g,"%d ",v[i]);
}
int main()
{
int a,b,c;
FILE *f=fopen("radixsort.in","r");
fscanf(f,"%d%d%d%d",&n,&a,&b,&c);
v[1]=b;
for(int i=2; i<=n; i++)
v[i] = ((long long)a*v[i-1] + b) % c;
int step,i;
for(step=0; step<=24; step+=8)
{
//fac un vector de numarare in care nrap[k]=kte dintre valorile
//din shir se termina in k-1. Pt. ca lucram pe octetzi,
//<=> valoarea ultimului octet sa fie k-1
memset(nrap,0,sizeof(nrap));
for(i=1; i<=n; ++i)
++nrap[((v[i]>>step)&0xff)+1];
nrap[0]=1;
for(i=1;i<=256;++i)
nrap[i]+=nrap[i-1];
for(i=1; i<=n; ++i)
{
v1[nrap[(v[i]>>step)&0xff]]=v[i];
nrap[(v[i]>>step)&0xff]++;
}
for(i=1;i<=n;i++)v[i]=v1[i];
}
afish();
return 0;
}