Pagini recente » Cod sursa (job #1553634) | Cod sursa (job #2361572) | Cod sursa (job #664583) | Cod sursa (job #1517813) | Cod sursa (job #1793353)
#include<cstdio>
int n,A,B,C,a[10000001],b[10000001],nr[256];
int main()
{
FILE *f=fopen("radixsort.in","r");
fscanf(f,"%d%d%d%d",&n,&A,&B,&C);
int i;
a[1]=B;
for(i=2;i<=n;i++)
a[i]=((long long)A*a[i-1]+B)%C;
int poz;
for(poz=0;poz<=24;poz+=8)//poz=nr. de ordine al byte-ului 0=ultimul
{
for(i=0;i<=255;i++)nr[i]=0;
for(i=1;i<=n;i++)//numar in nr[x] = cite numere au byte-ul poz egal cu x+1
nr[((a[i] >> poz)&0xff)+1]++;
nr[0]=1;
for(i=0;i<=255;i++)nr[i+1]+=nr[i];
for(i=1;i<=n;i++)
b[nr[(a[i]>>poz)&0xff]++]=a[i];//adica fix ceea ce fac aici
for(i=1;i<=n;i++)//so, in vectorul b le avem grupate pe seturi
a[i]=b[i];//dupa valoarea cifrei de pe pozitzia poz
}
f=fopen("radixsort.out","w");
for(i=1;i<=n;i+=10)
fprintf(f,"%d ",a[i]);
fprintf(f,"\n");
return 0;
}