Pagini recente » Cod sursa (job #2279821) | Cod sursa (job #1730260) | Cod sursa (job #2366732) | Cod sursa (job #2448921) | Cod sursa (job #1528457)
#include <fstream>
#include <vector>
#define N 10000010
#define Int (long long)
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
long long a,b,c,x;
int n,i,cnt[256];
unsigned s[N],S[N],*v,*V,*aux;
int main()
{
f>>n>>a>>b>>c;
x=b;v=s;V=S;
for(i=1;i<=n;i++)
{
v[i]=(int)x;
x=((a*x)%c+b)%c;
}
for(int step=1;step<=4;step++)
{
//numar cate elemente contine fiecare buchet;
for(i=1;i<=n;i++)
cnt[v[i]&255]++;
//determin la ce indice se termina fiecare buchet
for(i=1;i<=255;i++)cnt[i]+=cnt[i-1];
//asez elemetele in buchete
for(i=n;i>=1;i--)
{
a=v[i]&255;
b=v[i]>>8;
V[cnt[a]]=b|(a<<24);
cnt[a]--;
}
//cutarare cnt (analog cu
for(i=0;i<=255;i++)cnt[i]=0;
//schimb pointare pe vectorul nou
aux=V;V=v;v=aux;
}
for(i=1;i<=n;i+=10)
g<<v[i]<<' ';
return 0;
}