Pagini recente » Cod sursa (job #1021302) | Cod sursa (job #1085349) | Cod sursa (job #1495552) | Cod sursa (job #657517) | Cod sursa (job #1155546)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int N, A, B, C;
int work[10000000];
void
readData ()
{
ifstream in ("radixsort.in");
in >> N >> A >> B >> C;
int temp = B;
work[0] = B;
for (int i = 1; i < N; i++)
{
temp = (1LL * A * temp + B) % C;
work[i] = temp;
}
in.close();
}
void
radix (int step)
{
vector < int >buckets[256];
unsigned int mask = 0x000000ff;
int offset = 8 * step;
for (int i = 0; i < N; i++)
{
buckets[(work[i] >> offset) & mask].push_back (work[i]);
}
int idx = 0;
for (int i = 0; i <= 255; i++)
{
for (vector<int>::iterator it = buckets[i].begin (); it != buckets[i].end (); ++it)
{
work[idx++] = (*it);
}
}
}
void solve()
{
for (int i = 0; i <= 3; i++)
{
radix(i);
}
}
void
print ()
{
ofstream of ("radixsort.out");
for (int i = 0; i < N; i = i + 10)
of << work[i] << ' ';
of.close();
}
int
main ()
{
readData ();
solve ();
print ();
return 0;
}