Pagini recente » Cod sursa (job #82726) | Cod sursa (job #3285285) | Cod sursa (job #1829528) | Cod sursa (job #2213484) | Cod sursa (job #1295015)
#include <iostream>
#include <fstream>
using namespace std;
fstream in("radixsort.in",ios::in);
fstream out("radixsort.out",ios::out);
struct nod
{
int info;
nod *next;
};
int main()
{
int a[1000000],i,N,A,B,C,mod=10,div=1,flag,j,x,max,div1=1;
nod v[15],*p,*q[15],*z;
in>>N>>A>>B>>C;
in.close();
a[1]=B;
max=a[1];
for(i=2;i<=N;i++)
{
a[i]=(A*a[i-1]+B)%C;
if(a[i]>max)
max=a[i];
}
while(max>0)
{
div1=div1*10;
max=max/10;
}
do{
flag=1;
for(i=0;i<10;i++)
{
v[i].next=0;
q[i]=&v[i];
}
for(j=1;j<=N;j++)
{
x=a[j];
x=x/div;
x=x%mod;
p=new nod;
p->info=a[j];
q[x]->next=p;
p->next=0;
q[x]=p;
}
j=1;
for(i=0;i<10;i++)
{
p=v[i].next;
while(p!=0)
{
a[j++]=p->info;
p=p->next;
}
}
for(i=0;i<10;i++)
{
if(v[i].next!=0)
{
z=v[i].next;
p=z->next;
}
while(z->next!=0)
{
delete z;
z=p;
p=p->next;
}
}
div=div*10;
for(i=1;i<N;i++)
for(j=i+1;j<=N;j++)
if(a[i]>a[j])
flag=0;
}while(flag==0);
for(i=1;i<=N;i=i+10)
out<<a[i]<<" ";
out.close();
return 0;
}