Pagini recente » Cod sursa (job #153248) | Cod sursa (job #505906) | Cod sursa (job #831692) | Cod sursa (job #1406082) | Cod sursa (job #1248038)
#include <queue>
#include <fstream>
#include <limits>
using namespace std;
queue <unsigned int> a[256];
unsigned int v[10000000];
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int main()
{
int n,A,B,C;
fin >> n>> A>> B>> C;
v[1] = B;
for (int i = 2; i <= n; i++)
{
v[i]=(unsigned int)((unsigned long long)(A*v[i-1]+B)%C);
}
bool sortat = 0;
unsigned long long k = 1<<8;
unsigned long long aux = 1;
while (k<=(aux <<32))
{
for (int i = 1; i <= n; i++)
{
a[v[i]&(k-1)>>(k-1>>8)].push(v[i]);
}
int h = 0;
for (int i = 0; i <= 255; i++)
{
while (!a[i].empty())
{
h++;
v[h]= a[i].front();
a[i].pop();
}
}
k <<=8;
}
for (int i = 1; i <= n; i+=10)
{
fout << v[i] << ' ';
}
}