Cod sursa(job #2614751)

Utilizator UtilizatorGBGeorge Bodea UtilizatorGB Data 12 mai 2020 17:13:02
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 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;
    f.open("algsort.in");
    g.open("algsort.out");
    f>>n;
    int v[n];
    for(int i=0;i<n;i++)
        f>>v[i];
    radix_sort(v,n);
    for(int i=0;i<n;i++)
        g<<v[i]<<' ';
    f.close();
    g.close();
    return 0;
}