Cod sursa(job #2607804)

Utilizator Silviu.Stancioiu@gmail.comSilviu Stancioiu [email protected] Data 30 aprilie 2020 11:07:21
Problema Radix Sort Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>

using namespace std;

void Radix(uint32_t* v, int n, int iter)
{
    if (iter <= 0)
        return;

    if (!n)
        return;

    uint32_t* vec[16];

    for (int i = 0; i < 16; i++)
    {
        vec[i] = new uint32_t[n + 1];
        memset(vec[i], 0, sizeof(uint32_t) * (n + 1));
    }
    for (int i = 1; i <= n; i++)
    {
        int index = (v[i] >> (iter - 1) * 4) & 15;
        vec[index][++vec[index][0]] = v[i];
    }

    for (int i = 0; i < 16; i++)
        Radix(vec[i], vec[i][0], iter - 1);

    int index = 1;
    for (int i = 0; i < 16; i++)
        for (int j = 1; j <= vec[i][0]; j++)
            v[index++] = vec[i][j];

    for (int i = 0; i < 16; i++)
        delete[] vec[i];
}

int main()
{
    uint32_t n, a, b, c;

    ifstream fin("radixsort.in");
    fin >> n >> a >> b >> c;
    fin.close();

    uint32_t* v = new uint32_t[n + 1];
    v[1] = b;
    for (int i = 2; i <= n; i++)
        v[i] = (a * v[i - 1] + b) % c;

    Radix(v, n, 8);

    ofstream fout("radixsort.out");
    
    for (int i = 1; i <= n; i += 10)
        fout << v[i] << " ";
    
    fout.close();

    delete[] v;
    v = NULL;

    return 0;
}