Pagini recente » Cod sursa (job #1196806) | Cod sursa (job #2884953) | Cod sursa (job #990425) | Cod sursa (job #163356) | Cod sursa (job #2607856)
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <string.h>
using namespace std;
void Radix(vector<uint32_t>& v, int iter)
{
if (iter <= 0)
return;
if (!v.size())
return;
vector<uint32_t> vec[16];
for (int i = 0; i < v.size(); i++)
{
int index = (v[i] >> (iter - 1) * 4) & 15;
vec[index].push_back(v[i]);
}
for (int i = 0; i < 16; i++)
Radix(vec[i], iter - 1);
int index = 0;
for (int i = 0; i < 16; i++)
for (int j = 0; j < vec[i].size(); j++)
v[index++] = vec[i][j];
}
int main()
{
unsigned long long n, a, b, c;
ifstream fin("radixsort.in");
fin >> n >> a >> b >> c;
fin.close();
vector<uint32_t> v;
v.resize(n);
v[0] = b;
for (int i = 1; i < n; i++)
v[i] = (a * v[i - 1] + b) % c;
//Radix(v, 8);
for (int i = 0; i < 4; i++)
{
vector<uint32_t> cnt[256];
for (int j = 0; j < v.size(); j++)
{
int index = (v[j] >> (8 * i)) & 255;
cnt[index].push_back(v[j]);
}
int index = 0;
for (int j = 0; j < 256; j++)
for (int k = 0; k < cnt[j].size(); k++)
v[index++] = cnt[j][k];
}
ofstream fout("radixsort.out");
for (int i = 0; i < n; i += 10)
fout << v[i] << " ";
fout.close();
return 0;
}