Pagini recente » Cod sursa (job #1759258) | Cod sursa (job #2701552) | Cod sursa (job #2020524) | Cod sursa (job #569650) | Cod sursa (job #1249446)
#include <fstream>
#include<queue>
#include<iostream>
using namespace std;
const int NMAX= 10000010;
const int r=8;
const int base = ( 1<<r );
int n, a[NMAX],A,B,C,p;
queue <int> q[2][base];
void citire()
{
int i=1;
ifstream fin("radixsort.in");
fin>>n>>A>>B>>C;
fin.close();
a[i]=B;
for(i=2;i<=n;i++)
a[i]=(A * a[i-1] + B) % C;
}
void RadixSort()
{
int j;
const int rest = base - 1;
for (int i = 1; i <= n; ++ i)
q[0][a[i] & rest].push(a[i]);
int nrpasi = 32 / r + ((32 % r != 0) ? 1 : 0);
p = 0;
for (int pas = 1; pas < nrpasi; ++ pas, p = 1 - p)
{
for (j = 0; j < base; ++ j)
while (!q[p][j].empty())
{
int x = q[p][j].front();
q[p][j].pop();
q[1 - p][(x >> (pas * r)) & rest].push(x);
}
}
}
void afisare()
{
int i,nr=0;
ofstream fout("radixsort.out");
for(i=0;i<base;i++)
{
while(!q[p][i].empty())
{
nr++;
if(nr%10 == 1)
fout<<q[p][i].front()<<" ";
q[p][i].pop();
}
}
fout<<"\n";
fout.close();
}
int main()
{
citire();
RadixSort();
afisare();
return 0;
}