Cod sursa(job #1470420)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 11 august 2015 00:30:32
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
// 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
long long count[260];
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;
        fill_n(count, MASK,0);
    }
}
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;
}