Pagini recente » Cod sursa (job #407296) | Cod sursa (job #2561615) | Cod sursa (job #3295161) | Cod sursa (job #606140) | Cod sursa (job #2608677)
#include <fstream>
using namespace std;
const int N = 1e7;
const int NB = 11;
const int B = 1 << NB;
const int NC = 3;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
int n, a[2][N], nr[B], poz[B];
void citire()
{
int aa, b, c;
in >> n >> aa >> b >> c;
a[0][0] = b;
for (int i = 1; i < n; i++)
{
a[0][i] = ((long long)aa * a[0][i-1] + b) % c;
}
in.close();
}
void rad_sort()
{
for (int k = 0; k < NC; k++)
{
int ic = k & 1;
int ia = 1 - ic;
int nsh = k * NB;
for (int j = 0; j < B; j++)
{
nr[j] = 0;
}
for (int i = 0; i < n; i++)
{
nr[(a[ic][i] >> nsh) & (B - 1)]++;
}
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++)
{
int cif = (a[ic][i] >> nsh) & (B - 1);
a[ia][poz[cif]++] = a[ic][i];
}
}
}
void afisare()
{
int ic = NC & 1;
for (int i = 0; i < n; i += 10)
{
out << a[ic][i] << " ";
}
}
int main()
{
citire();
rad_sort();
afisare();
return 0;
}