Pagini recente » Cod sursa (job #2286260) | Cod sursa (job #2601591) | Cod sursa (job #3250116) | Cod sursa (job #1624390) | Cod sursa (job #2607804)
#include <iostream>
#include <fstream>
using namespace std;
void Radix(uint32_t* v, int n, int iter)
{
if (iter <= 0)
return;
if (!n)
return;
uint32_t* vec[16];
for (int i = 0; i < 16; i++)
{
vec[i] = new uint32_t[n + 1];
memset(vec[i], 0, sizeof(uint32_t) * (n + 1));
}
for (int i = 1; i <= n; i++)
{
int index = (v[i] >> (iter - 1) * 4) & 15;
vec[index][++vec[index][0]] = v[i];
}
for (int i = 0; i < 16; i++)
Radix(vec[i], vec[i][0], iter - 1);
int index = 1;
for (int i = 0; i < 16; i++)
for (int j = 1; j <= vec[i][0]; j++)
v[index++] = vec[i][j];
for (int i = 0; i < 16; i++)
delete[] vec[i];
}
int main()
{
uint32_t n, a, b, c;
ifstream fin("radixsort.in");
fin >> n >> a >> b >> c;
fin.close();
uint32_t* v = new uint32_t[n + 1];
v[1] = b;
for (int i = 2; i <= n; i++)
v[i] = (a * v[i - 1] + b) % c;
Radix(v, n, 8);
ofstream fout("radixsort.out");
for (int i = 1; i <= n; i += 10)
fout << v[i] << " ";
fout.close();
delete[] v;
v = NULL;
return 0;
}