Pagini recente » Cod sursa (job #965080) | Cod sursa (job #275042) | Cod sursa (job #2525737) | Cod sursa (job #2999072) | Cod sursa (job #2223236)
#include <fstream>
std::ifstream f("radixsort.in");
std::ofstream g("radixsort.out");
const int BUCKETSIZE = 32500000;//536870911; //(2^32 - 1)/4
int bucket[BUCKETSIZE];
int inc0 = 1;
int inc8 = 1 << 8;
int inc16 = 1 << 16;
int inc24 = 1 << 24;
void addVal(int bucket[], long int val)
{
long int bucketNumber = val / BUCKETSIZE;
long int posInBucket = val % BUCKETSIZE;
switch (bucketNumber)
{
case 0: bucket[posInBucket] += inc0; break;
case 1: bucket[posInBucket] += inc8; break;
case 2: bucket[posInBucket] += inc16; break;
case 3: bucket[posInBucket] += inc24; break;
}
}
void initializeBuckets(int bucket[])
{
for (long int i = 0; i < BUCKETSIZE; i++)
{
bucket[i] = 0;
}
}
void printValues(int bucket[], int bucketNumber)
{
int i, j, count;
for (i = 0; i < BUCKETSIZE; i++)
{
count = (bucket[i] << (3-bucketNumber) * 8) >> 24;
for (j = 0; j < count; j++)
{
g << bucketNumber * BUCKETSIZE + i << ' ';
}
}
}
int main()
{
long int N, A, B, C;
f >> N >> A >> B >> C;
long int val = B;
addVal(bucket, val);
initializeBuckets(bucket);
for (long int i = 2; i <= N; i++)
{
val = (A * val + B) % C;
addVal(bucket, val);
}
printValues(bucket, 0);
printValues(bucket, 1);
printValues(bucket, 2);
printValues(bucket, 3);
return 0;
}