Я хочу сортировать целые числа, и я знаю, что сортировка по основанию должна быть отличной для этого. Любая реализация библиотеки для такого рода?
Есть ли в C++ Algorithm/Boost Lib сортировка по основанию?
Ответы (2)
Зависит от того, насколько строго вы определяете сортировку по основанию, поскольку Boost 1.58.0 включает сортировку по спреду, представляющий собой гибридный алгоритм сортировки, эвристически сочетающий в себе групповую и сравнительную сортировку.
Для сортировки целых чисел и без требований к эффективности Θ(n) в наихудшем случае Spreadsort должен удовлетворить вас.
В качестве аргумента вы также можете взглянуть на мою реализацию сортировки по основанию LSD , что довольно неэффективно с памятью, но иногда быстрее, чем Spreadsort. Вам нужна только ветка radix_sort, но я связался с веткой speed_test, потому что у нее есть файл readme.
Более актуальным ответом будет Да, так как в версии 1.58 это так:
У него есть что-то известное как SpreadSort, и он «волшебным образом» обнаружит оптимизированные пути для таких типов, как std::string
, или чисел с плавающей запятой, которые можно рассматривать как массивы байтов.
ska_sort(vec.begin(), vec.end(), [](const auto& value) { return value.foo; });
тоже sort в определенном полеfoo
. - person Morwenn   schedule 01.10.2017