I was reading the Wikipedia page for Radix sort[1] and I noticed a pretty terrible example for C++, so I set about writing my own, which I’ve included in the wiki as a modernized C++14 version.
#include <iostream>
#include <algorithm>
#include <array>
#include <vector>
#include <random>
int main()
{
using INT = std::mt19937_64::result_type;
std::array<INT, 200000> randoms;
std::generate(randoms.begin(), randoms.end(), [engine = std::mt19937_64{}]() mutable {return engine();});
std::array<std::vector<INT>, 256> buckets;
for (auto r : randoms) std::cout << r << std::endl;
std::cout << std::endl;
for (int i = 0; i < sizeof(INT); ++i)
{
for (auto r : randoms) buckets[(r >> (i << 3)) & 0xFF].push_back(r);
auto j = randoms.begin();
for (auto& bucket : buckets)
{
for (auto b : bucket) *(j++) = b;
bucket.clear();
}
}
for (auto r : randoms) std::cout << r << std::endl;
return 0;
}
