Владимир Ситников писал(а):
Документацию на что?
В приведённом примере из стандартной библиотеки это функция filter (которая фильтрует список по определённому условию), оператор ++ (обозначает объединение списков).
Т.е. как раз описан именно алгоритм, а не "вызов библиотечной функции quicksort". Это именно реализация.
Можете ткнуть где именно в quickSort на Haskell у вас возникает "перелистывание страницы"?
Это даже не про Haskell. Я имел ввиду найденную мною реализацию. Приведу её, чтобы не было недоразумений о чем я пишу.
Реализация алгоритма "Быстрой сортировки" на языке С++ с использованием:
1) Библиотечного алгоритма
nth_element для разбиения диапазона на поддиапазоны, в одном из которых элементы меньшие опорного, в другом - большие;
2) Рекурсии - для сортировки получившихся поддиапазонов;
3) Шаблонов - для работы с любым контейнером.
Код:
template<class FwdIt, class Compare = std::less<>>
void quickSort(FwdIt first, FwdIt last, Compare cmp = Compare{})
{
auto const N = std::distance(first, last);
if (N <= 1) return;
auto const pivot = std::next(first, N / 2);
std::nth_element(first, pivot, last, cmp);
quickSort(first, pivot, cmp);
quickSort(pivot, last, cmp);
}
Для меня - человека заинтересованного в теме "Алгоритмы" и в их реализации с использованием возможностей языка С++ - этот код стал понятным после пару дней копаний. Вроде бы всё понятно. Для меня.
Владимир Ситников писал(а):
Даже если на простом русском написать, то будет очень и очень похоже на Haskell код.
"Для сортировки массива нужно взять его первый элемент, отсортировать те, что меньше этого элемента, потом добавить сам элемент, потом добавить отсортированные остальные"
Но Haskell код это не просто словоблудие, а прямо реально работающий код. И алгоритм quicksort он описывает гораздо понятнее/компактнее.
Приведенный на Haskell'e код мне достаточно понятен. Немного глазу привыкнуть к синтаксису(я не знаток множества языков) и, действительно, очень лаконично смотрится! Единственное - для меня, все же, были очень важны Ваши комментарии по поводу строчек - что какая делает и что при этом происходит. Их вышло меньше, чем в приведенном мною описание.
Вот и раскрывается моя мечта - очень хочется понизить порог вхождения в тему начинающих программистов которые, возможно, не знают что такое шаблоны, nth_element(в случае реализации С++), что такое xs, filter(в случае Haskell), а просто бы посмотрели на какую-то магическую схему, где видна суть алгоритма и сказали бы "А, тут же всё понятно! Пф!".