Skip to content

Instantly share code, notes, and snippets.

@xavery
Created July 17, 2017 20:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xavery/166f42839f0b32aaca71b97f12446c85 to your computer and use it in GitHub Desktop.
Save xavery/166f42839f0b32aaca71b97f12446c85 to your computer and use it in GitHub Desktop.
// https://stackoverflow.com/questions/32172144
#include <array>
template<typename T, size_t N, typename UnaryFunction = std::less<T>>
void sortNet10(std::array<T, N> &data, UnaryFunction&& f = UnaryFunction()) {
static_assert(N == 10, "this function can only work for 10-element arrays");
if (f(data[0], data[5])) std::swap(data[0], data[5]);
if (f(data[1], data[6])) std::swap(data[1], data[6]);
if (f(data[2], data[7])) std::swap(data[2], data[7]);
if (f(data[3], data[8])) std::swap(data[3], data[8]);
if (f(data[4], data[9])) std::swap(data[4], data[9]);
if (f(data[0], data[3])) std::swap(data[0], data[3]);
if (f(data[5], data[8])) std::swap(data[5], data[8]);
if (f(data[1], data[4])) std::swap(data[1], data[4]);
if (f(data[6], data[9])) std::swap(data[6], data[9]);
if (f(data[0], data[2])) std::swap(data[0], data[2]);
if (f(data[3], data[6])) std::swap(data[3], data[6]);
if (f(data[7], data[9])) std::swap(data[7], data[9]);
if (f(data[0], data[1])) std::swap(data[0], data[1]);
if (f(data[2], data[4])) std::swap(data[2], data[4]);
if (f(data[5], data[7])) std::swap(data[5], data[7]);
if (f(data[8], data[9])) std::swap(data[8], data[9]);
if (f(data[1], data[2])) std::swap(data[1], data[2]);
if (f(data[3], data[5])) std::swap(data[3], data[5]);
if (f(data[4], data[6])) std::swap(data[4], data[6]);
if (f(data[7], data[8])) std::swap(data[7], data[8]);
if (f(data[1], data[3])) std::swap(data[1], data[3]);
if (f(data[4], data[7])) std::swap(data[4], data[7]);
if (f(data[2], data[5])) std::swap(data[2], data[5]);
if (f(data[6], data[8])) std::swap(data[6], data[8]);
if (f(data[2], data[3])) std::swap(data[2], data[3]);
if (f(data[4], data[5])) std::swap(data[4], data[5]);
if (f(data[6], data[7])) std::swap(data[6], data[7]);
if (f(data[3], data[4])) std::swap(data[3], data[4]);
if (f(data[5], data[6])) std::swap(data[5], data[6]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment