Pagini recente » Cod sursa (job #2809460) | Cod sursa (job #2538085) | Cod sursa (job #346955) | Cod sursa (job #2601235) | Cod sursa (job #2335060)
#include <fstream>
#include <vector>
#include <queue>
std::vector<unsigned int> read(std::istream &in);
void radix_sort(std::vector<unsigned int> &V);
int main()
{
std::ifstream fin("radixsort.in");
std::ofstream fout("radixsort.out");
std::vector<unsigned int> V = read(fin);
radix_sort(V);
for (size_t i = 0; i < V.size(); i += 10)
fout << V[i] << ' ';
fout << std::endl;
return 0;
}
void radix_sort(std::vector<unsigned int> &V)
{
int d;
std::vector<unsigned int> temp_V(V.size());
std::vector<unsigned int> digit_counts(257);
for (unsigned int pos = 0; pos < 32; pos += 8)
{
temp_V.swap(V);
for (size_t i = 0; i < digit_counts.size(); ++i)
digit_counts[i] = 0;
for (auto v : temp_V)
{
d = (v >> pos) & 255;
digit_counts[d + 1] += 1;
}
for (size_t i = 1; i < digit_counts.size(); ++i)
digit_counts[i] += digit_counts[i - 1];
for (auto v : temp_V)
{
d = (v >> pos) & 255;
V[digit_counts[d]] = v;
digit_counts[d] += 1;
}
}
}
std::vector<unsigned int> read(std::istream &in)
{
int n, a, b, c;
in >> n >> a >> b >> c;
std::vector<unsigned int> V(n);
V[0] = b;
for (size_t i = 1; i < V.size(); ++i)
{
V[i] = (1ll * a * V[i - 1] + b) % c;
}
return V;
}