Pagini recente » Cod sursa (job #2071525) | Cod sursa (job #3418) | Cod sursa (job #2274567) | Cod sursa (job #3125939) | Cod sursa (job #1470184)
// https://www.cs.usfca.edu/~galles/visualization/RadixSort.html
// doar ca pe biti in loc de cifre
#include <iostream>
#include <cstring>
#include <fstream>
#define MAX 10000005
#define bucket_size 8
using namespace std;
int N,A,B,C;
int p[MAX],q[MAX];
int *a,*b;
const int MASK = 255; // 1<<8 -1
int count[1<<bucket_size];
void radix_sort()
{
int bucket, shift, i, *temp;
a = p;
b = q;
for (bucket = 0 ; bucket < 4 ; bucket++)
{
shift = bucket * 8;
for (i = 0 ; i < N ; i++)
count[(a[i]>>shift) & MASK ]++;
for (i = 1; i < 1<<bucket_size ; i++)
count[i] += count[i-1];
for ( i = N - 1 ; i >= 0 ; i--)
{
int indice = (a[i]>>shift) & MASK;
count[indice]--;
b[count[indice]] = a[i];
}
temp = a;
a = b;
b = temp;
memset(count, 0, 1<<bucket_size);
}
}
int main()
{
int i;
fstream f,g;
f.open("radixsort.in",ios::in);
g.open("radixsort.out",ios::out);
f>>N>>A>>B>>C;
p[0] = B;
for ( i = 1 ; i < N ; i++)
p[i] = ( 1LL * A * p[i-1] + B) % C;
radix_sort();
for ( i = 0; i < N ; i+=10 )
g<<p[i]<<" ";
return 0;
}