Pagini recente » Cod sursa (job #1715950) | Cod sursa (job #1831041) | Cod sursa (job #2898528) | Cod sursa (job #136545) | Cod sursa (job #1249413)
#include <fstream>
#include<queue>
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 i,nrpasi,pas,j ;
nrpasi = 32 / r;
int rest = base-1;
for(i=1;i<=n;i++)
q[0][a[i] & rest].push(a[i]);
if(32% r == 1)
nrpasi += 1;
for(pas=1 ; pas<nrpasi ; pas++ , p=1-p)
{
for(j=0;j < base; j++)
{
while(!q[p][j].empty())
{
int k=q[p][j].front();
q[p][j].pop();
q[1-p][k >> r].push(k);
}
}
}
}
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.close();
}
int main()
{
citire();
RadixSort();
afisare();
return 0;
}