Pagini recente » Cod sursa (job #221417) | Cod sursa (job #1175119) | Cod sursa (job #636984) | Cod sursa (job #2138020) | Cod sursa (job #1222457)
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
#define NMAX 10000001
#define MASK (1<<8)-1
int v[NMAX],cnt[MASK+1],poz[MASK+1],aux[NMAX];
void radix(int p, int q, int nr)
{
int i,k,j;
if(p==q || nr<0)
return ;
for(i=p;i<=q;i++)
cnt[(v[i]>>nr)&MASK]++;
poz[0]=p;
for(i=1;i<=MASK;i++)
poz[i]=poz[i-1]+cnt[i-1];
for(i=p;i<=q;i++)
aux[poz[(v[i]>>nr)&MASK]++]=v[i];
for(i=p;i<=q;i++)
v[i]=aux[i];
memset(cnt,0,sizeof(cnt));
for(i=p;i<=q;i++) {
k=(v[i]>>nr)&MASK;
j=i;
while(((v[j+1]>>nr)&MASK)==k && j+1<=q)
j++;
radix(i,j,nr-8);
i=j;
}
}
int main ()
{
int n,i,a,b,c;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
f>>n>>a>>b>>c;
v[1]=b;
for(i=2;i<=n;i++)
v[i]=(0LL+1LL*a*v[i-1]+b)%c;
f.close();
radix(1,n,24);
for(i=1;i<=n;i=i+10)
g<<v[i]<<" ";
g.close();
return 0;
}