Cod sursa(job #2609418)

Utilizator darksky185Alexandru Gabriel darksky185 Data 2 mai 2020 16:49:54
Problema Radix Sort Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include <fstream>
#include <iostream>

using namespace std;

int v[10000000];
int aux[10000000];

void radix_sort(auto* sir_sort, auto* sir_aux, const int n) {
    ///nr de biti
    const int NB = 16;

    ///baza numerelor pe care le sortam
    const int B = 1 << NB;

    int nr[B], poz[B];
    //int p = 1;

    for(int k = 0; k < n; ++k) {

        int KNB = k*NB;

        ///resetez nr
        for(int i = 0; i < B; ++i) {
            nr[i] = 0;
        }

        for(int j = 0; j < n; ++j) {
            ++nr[(sir_sort[j]>>KNB)&(B-1)];
            //++nr[sir_sort[j]/p%10];
        }

        ///construiesc poz
        poz[0] = 0;
        for(int i = 1; i < B; ++i) {
            poz[i] = poz[i-1] + nr[i-1];
        }
        for(int j = 0; j < n; ++j) {
            sir_aux[poz[(sir_sort[j]>>KNB)&(B-1)]++] = sir_sort[j];
            //sir_aux[poz[sir_sort[j]/p%10]++] = sir_sort[j];
        }
        for(int j = 0; j < n; ++j) {
            sir_sort[j] = sir_aux[j];
        }
        //p *= 10;
    }
}

void generare_nr(auto* sir_generare, int n, int a, int b, int c) {
    sir_generare[0] = b;
    for(int i = 1; i < n; ++i) {
        sir_generare[i] = ((long long)a * sir_generare[i-1] + b) % c;
    }
}

int main() {

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

    int n, a, b, c;

    fin >> n >> a >> b >> c;

    generare_nr(v, n, a, b, c);

    radix_sort(v, aux, n);

    for(int i = 0; i < n; i += 10) {
        fout << v[i] << " ";
    }

    fin.close();
    fout.close();

    return 0;
}