Cod sursa(job #2614783)

Utilizator UtilizatorGBGeorge Bodea UtilizatorGB Data 12 mai 2020 18:05:26
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream f;
std::ofstream g;

void radix_sort(int v[], int nr) {
    int mask = (1 << 8) - 1;
    int pas = 0;
    std::vector<int> bucket[256];
    int maxi = 0, cifre_max = 0;
    for (int i = 0; i < nr; i++) {
        if (v[i] > maxi)
            maxi = v[i];
    }
    while (maxi != 0) {
        cifre_max++;
        maxi >>= 8;
    }

    for (int k = 0; k < cifre_max; k++) {
        for (int i = 0; i < nr; i++)
            bucket[(v[i] >> pas) & mask].push_back(v[i]);
        nr = 0;
        for (int i = 0; i < 256; i++) {
            for (int j = 0; j < bucket[i].size(); j++)
                v[nr++] = bucket[i][j];
            bucket[i].clear();
        }
        pas += 8;
    }

}
int main() {

    int n,A,B,C;
    f.open("radixsort.in");
    g.open("radixsort.out");
    f>>n>>A>>B>>C;
    int v[n];
    v[0]=B;
    for(int i=1; i<n; i++ )
        v[i] = ( ( 1LL * A * v[i-1] ) % C + B ) % C;
    radix_sort(v,n);
    for(int i=0;i<n;i+=10)
        g<<v[i]<<' ';
    f.close();
    g.close();
    return 0;
}