Pagini recente » Cod sursa (job #1280538) | Cod sursa (job #2103961) | Cod sursa (job #2307887) | Cod sursa (job #518860) | Cod sursa (job #1801994)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 10000000+5
#define ct 0xFF
using namespace std;
int a[nmax], b[nmax];
int N, A, B, C;
int cnt[ct+5], start[ct+5];
int main()
{
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int i, j, k;
int element;
fin >> N >> A >> B >> C;
a[1] = B;
for (i = 2; i <= N; i++)
a[i] = (((A * a[i-1]) % C + B) % C);
int * current = a, * other = b;
for (i = 0; i < sizeof(a[0]); i++)
{
for (j = 0; j <= ct; j++)
cnt[j] = 0;
for (j = 1; j <= N; j++)
cnt[(current[j] >> (i * 8)) & ct]++;
start[0] = 1;
for (j = 1; j <= ct; j++)
start[j] = start[j-1] + cnt[j-1];
for (j = 1; j <= N; j++)
other[start[(current[j] >> (i*8)) & ct]++] = current[j];
swap(current, other);
}
for (i = 1; i <= N; i += 10)
fout << current[i] << " ";
return 0;
}