Pagini recente » Cod sursa (job #2528053) | Cod sursa (job #2496066) | Cod sursa (job #1734749) | Cod sursa (job #462898) | Cod sursa (job #1718461)
#include <cstdio>
#include <vector>
#include <algorithm>
#define NMAX 10000001
using namespace std;
vector<unsigned int> buckets[256];
unsigned int v[NMAX];
int main()
{
FILE *fin, *fout;
unsigned int N, A, B, C;
unsigned int i, j, k;
unsigned char X;
vector<unsigned int>::iterator it;
fin = fopen("radixsort.in", "r");
fout = fopen("radixsort.out", "w");
fscanf(fin, "%u %u %u %u", &N, &A, &B, &C);
v[1] = B;
for(i=2; i<=N; i++)
v[i] = (1LL * A * v[i-1] + B) % C;
for(i=0; i<4; i++)
{
for(j=1; j<=N; j++)
{
X = (v[j] >> (8*i)) & 0xFF;
buckets[X].push_back(v[j]);
}
k = 1;
for(j=0; j<256; j++)
{
if(!buckets[j].empty())
{
sort(buckets[j].begin(), buckets[j].end());
for(it=buckets[j].begin(); it!=buckets[j].end(); it++)
v[k++] = *it;
buckets[j].clear();
}
}
}
for(i=1; i<=N; i+=10)
fprintf(fout, "%u ", v[i]);
putc('\n', fout);
fclose(fin);
fclose(fout);
return 0;
}