Pagini recente » Cod sursa (job #564900) | Cod sursa (job #2809074) | Cod sursa (job #2195901) | Cod sursa (job #2732588) | Cod sursa (job #2654185)
#include <fstream>
#include <array>
#include <cstring>
using namespace std;
const uint MAXN = 10000000;
const uint RADIX_BITS = 8;
const uint RADIX = 1 << RADIX_BITS;
// array<uint, MAXN> vect;
// array<uint, MAXN> temp;
uint buf1[MAXN];
uint buf2[MAXN];
uint buckets[RADIX];
uint* radixsort(uint N, uint *vect)
{
uint *temp = buf2;
for (uint step = 0; step < sizeof(uint)*8; step += RADIX_BITS) {
memset(buckets, 0, sizeof(buckets));
// for (uint i = 0; i < RADIX; i++)
// buckets[i] = 0;
for (uint i = 0; i < N; i++)
buckets[(vect[i] >> step) & (RADIX-1)]++;
for (uint i = 1; i < RADIX; i++)
buckets[i] += buckets[i-1];
for (int i = N-1; i != -1; i--)
{
uint b = (vect[i] >> step) & (RADIX-1);
buckets[b]--;
temp[buckets[b]] = vect[i];
}
swap(vect, temp);
}
return vect;
}
int main(int argc, char const *argv[])
{
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
unsigned long long N, A, B, C;
fin >> N >> A >> B >> C;
buf1[0] = B;
for (uint i = 1; i < N; i++)
{
buf1[i] = ((((A * buf1[i-1]) % C + B) % C));
}
uint* vect = radixsort(N, buf1);
for (uint i = 0; i < N; i += 10)
fout << vect[i] << ' ';
return 0;
}