Pagini recente » Cod sursa (job #1839574) | Cod sursa (job #2204397) | Cod sursa (job #586631) | Cod sursa (job #637932) | Cod sursa (job #1155477)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int N, A, B, C;
vector < int >work;
void
readData ()
{
ifstream in ("radixsort.in");
in >> N >> A >> B >> C;
int temp = B;
work.push_back (B);
for (int i = 2; i <= N; i++)
{
temp = (A * temp + B) % C;
work.push_back (temp);
}
}
void
solve ()
{
vector < int >buckets[256];
int mask = 0x000000ff;
for (int i = 0; i <= 3; i++)
{
int offset = 8 * i;
vector < int >::iterator it;
for (it = work.begin (); it != work.end (); it++)
{
buckets[(*it & mask) >> offset].push_back (*it);
}
work.clear ();
mask = mask << 8;
for (int i = 0; i <= 255; i++)
{
for (it = buckets[i].begin (); it != buckets[i].end (); it++)
{
work.push_back (*it);
}
buckets[i].clear ();
}
}
}
void
print ()
{
ofstream of ("radix.out");
for (int i = 0; i < N; i = i + 10)
of << work[i] << ' ';
}
int
main ()
{
readData ();
solve ();
print ();
return 0;
}