Cod sursa(job #1801052)

Utilizator dumitrualexAlex Dumitru dumitrualex Data 8 noiembrie 2016 16:41:09
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 10000000+5
#define ct ((1<<8)-1)

using namespace std;

int a[nmax], b[nmax];
int N, A, B, C;
int cnt[ct+5], start[ct+5];

int main()
{
    ifstream fin("radixsort.in");
    ofstream fout("radixsort.out");

    int i, j, k;
    int element;

    fin >> N >> A >> B >> C;

    a[1] = B;
    for (i = 2; i <= N; i++)
        a[i] = ((A * a[i-1] + B) % C);

    int * current = a, * other = b;

    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < ct; j++)
            cnt[j] = 0;
        for (j = 1; j <= N; j++)
            cnt[(current[j] >> (i * 4)) & ct]++;
        start[0] = 1;
        for (j = 1; j < ct; j++)
            start[j] = start[j-1] + cnt[j-1];
        for (j = 1; j <= N; j++)
            other[start[(current[j] >> (i*4)) & ct]++] = current[j];

        swap(current, other);
    }

    for (i = 1; i <= N; i += 10)
        fout << current[i] << " ";
    return 0;
}