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; }