Pagini recente » Cod sursa (job #1936249) | Cod sursa (job #1456072) | Cod sursa (job #1709534) | Cod sursa (job #1634568) | Cod sursa (job #1369482)
#include<fstream>
#include<stdlib.h>
using namespace std;
struct coada
{
int x;
coada *leg;
};
coada *PR[10],*UL[10],*q;
void next(int i,int a,int b,int c,int v[])
{
v[i]=(a*v[i-1]+b)%c;
}
int cmp (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int n,a,j,b,c,aux,i,v[10000002],cif,k;
long long p;
int main()
{
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
fin>>n>>a>>b>>c;
v[1]=b;
for(i=2;i<=n;i++)
{
next(i,a,b,c,v);
}
// qsort(v+1,n,sizeof(int),cmp);
p=1;
for(i=1;i<11;i++)
{
for(j=1;j<=n;j++)
{
cif=v[j]/p%10;
q=new coada;
q->x=v[j];
q->leg=0;
if(PR[cif]==0)
{
PR[cif]=q;
UL[cif]=q;
}
else
{
UL[cif]->leg=q;
UL[cif]=q;
}
}
j=0;
for(k=0;k<=9;k++)
{
while(PR[k]!=0)
{
q=PR[k];
j++;
v[j]=q->x;
PR[k]=PR[k]->leg;
delete q;
}
UL[k]=0;
}
p=p*10;
}
for(i=1;i<=n;i=i+10)
{
fout<<v[i]<<" ";
}
fin.close();
fout.close();
return 0;
}