Cod sursa(job #1167942)

Utilizator andreiagAndrei Galusca andreiag Data 6 aprilie 2014 12:48:25
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <algorithm>

using namespace std;
const int Nmax = 10000005;

int a[Nmax];

void mysort(int begin, int end, int k)
{
    if (k < 4)
    {
        sort(a +begin +1, a +end);
        return;
    }
    int zero = begin, one = end, tmp;
    while (zero + 1 < one)
    {
        zero++;
        if (a[zero] & (1 << k))
            swap(a[zero--], a[--one]);
    }
    if (begin < zero) mysort(begin, zero+1, k-1);
    if (one < end)    mysort(one-1, end, k-1);
}

int main()
{
    ifstream f ("radixsort.in");
    ofstream g ("radixsort.out");

    int N, A, B, C;
    f >> N >> A >> B >> C;
    
    int x = B;
    for (int i = 0; i < N; i++)
    {
        a[i] = x;
        x = (1ll * A * x + B) % C;
    }

    mysort(-1, N, 31);

    for (int i = 0; i < N; i++)
        if (i % 10 == 0)
            g << a[i] << ' ';
    g << '\n';

    return 0;
}