Pagini recente » Cod sursa (job #1247121) | Cod sursa (job #2184750) | Cod sursa (job #2193183) | Cod sursa (job #624302) | Cod sursa (job #1244299)
#include <stdio.h>
FILE*f=fopen("radixsort.in","r"),*g=fopen("radixsort.out","w");
# define NR 10000003
long n,v[NR][10],maxim=0,ord[NR],nr[NR];
long b,a,c;
using namespace std;
void citire()
{
fscanf(f,"%ld %ld %ld %ld",&n,&a,&b,&c);
}
void impartire(long x,long i)
{
while(x!=0)
{
v[i][0]++;
v[i][v[i][0]]=x%10;
x=x/10;
}
if(maxim<v[i][0])
maxim=v[i][0];
}
void generare()
{
long x,x1;
impartire(b,1);
x1=b;
for(long i=2;i<=n;i++)
{
x=(a*x1+b)%c;
impartire(x,i);
ord[i]=i;
x1=x;
}
/*long x;
fscanf(f,"%ld",&n);
for(long i=1;i<=n;i++)
{
fscanf(f,"%ld ",&x);
impartire(x,i);
ord[i]=i;
}*/
}
void da_cu_0(long s[])
{
for(long i=0;i<=10;i++)
{
s[i]=0;
}
}
void ordonare()
{
long s[10];
for(long j=1;j<=maxim;j++)
{
da_cu_0(s);
// fregvente cifre
for(long i=1;i<=n;i++)
{
s[v[i][j]]++;
}
// sume partiale
for(long i=1;i<=10;i++)
{
s[i]+=s[i-1];
}
// ordonare
for(long i=n;i>=1;i--)
{
nr[s[v[ord[i]][j]]]=ord[i];
s[v[ord[i]][j]]--;
}
// copiere
for(long i=1;i<=n;i++)
{
ord[i]=nr[i];
}
}
}
void afisare()
{
for(long i=1;i<=n;i++)
{
if(i%10==1)
{
for(long j=v[ord[i]][0];j>=1;j--)
fprintf(g,"%ld",v[ord[i]][j]);
fprintf(g," ");
}
}
}
int main()
{
citire();
generare();
ordonare();
afisare();
return 0;
}