Алгоритм std::sort (и его кузены std::partial_sort и std::nth_element) из стандартной библиотеки С++ находится в большинстве реализаций сложное и гибридное объединение более элементарных алгоритмов сортировки, такие как сортировка выбора, сортировка вставки, быстрая сортировка, сортировка слияния или сортировка кучи.
Здесь много вопросов и на таких сайтах, как https://codereview.stackexchange.com/, связанных с ошибками, сложностью и другими аспектами реализации этих классических алгоритмов сортировки. Большинство предлагаемых реализаций состоят из необработанных циклов, используют манипуляции с индексами и конкретные типы и, как правило, нетривиальны для анализа с точки зрения правильности и эффективности.
Вопрос: как можно реализовать вышеупомянутые классические алгоритмы сортировки с использованием современного С++?
-   нет сырых циклов, но объединение стандартных алгоритмических блоков стандартной библиотеки из <algorithm>
- интерфейс итератора и использование шаблонов вместо манипуляции индексами и конкретных типов
-   стиль С++ 14, включая полную стандартную библиотеку, а также синтаксические шумоподавители, такие как auto, псевдонимы шаблонов, прозрачные компараторы и полиморфные лямбды.
Примечания:
- для дальнейших ссылок на реализации алгоритмов сортировки см. Wikipedia, Rosetta Code или http://www.sorting-algorithms.com/
-  согласно  Соглашения Sean Parent (слайд 39), необработанный цикл - это for-loop дольше чем состав двух функций с оператором. Таким образом,f(g(x));илиf(x); g(x);илиf(x) + g(x);не являются необработанными циклами, а также не являются петлями вselection_sortиinsertion_sortниже.
- Я следую терминологии Scott Meyers, чтобы обозначить текущий С++ 1y уже как С++ 14 и обозначить С++ 98 и С++ 03 как С++ 98, поэтому не плачьте меня за это.
- Как было предложено в комментариях @Mehrdad, в конце ответа я предоставляю четыре реализации в виде Живого примера: С++ 14, С++ 11, С++ 98 и Boost и С++ 98.
- Сам ответ представлен только в С++ 14. Там, где это уместно, я обозначаю различия в синтаксисе и библиотеке, где разные версии языка отличаются.
