Pagini recente » Cod sursa (job #2532969) | Cod sursa (job #1707085) | Cod sursa (job #941680) | Cod sursa (job #1539085) | Cod sursa (job #2611240)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
const int dim = 10000005;
int n,a,b,c,v[dim],nr[150],poz[150],aux[dim];
int main()
{
in >> n >> a >> b >> c;
v[0] = b;
int maxi = b;
for (int i=1; i<n; i++)
{
v[i] = ((long long int)(a * v[i-1]) + (long long int )(b)) % c;
maxi = max(maxi , v[i]);
}
int B = (1<<7);
int nb = 7;
int nc = 0;
int cif;
while (maxi != 0)
{
nc++;
maxi /= B;
}
for (int k=0; k<=nc; k++)
{
nb = k * nb;
memset(nr,0 ,sizeof(nr));
for (int i=0; i<n; i++)
{
cif = ((v[i] >>nb)&(B-1));
nr[cif]++;
}
poz[0] = 0;
for (int j=1; j<B; j++)
{
poz[j] = poz[j-1] + nr[j-1];
}
for (int i=0; i<n; i++)
{
cif = ((v[i] >>nb)&(B-1));
aux[poz[cif]++] = v[i];
}
for (int i=0; i<n; i++)
{
v[i] = aux[i];
}
}
for (int i=0; i<n; i += 10) out << v[i] << " ";
return 0;
}