...one of the most highly
regarded and expertly designed C++ library projects in the
world. — Herb Sutter and Andrei
boost::sort::spreadsort::string_sort — String sort algorithm using range, wraps using default of unsigned char. (All variants fall back to
boost::sort::pdqsort if the data size is too small, <
// In header: <boost/sort/spreadsort/string_sort.hpp> template<typename Range> void string_sort(Range & range);
string_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than
std::sort for large tests (>=100kB).
Worst-case performance is O(N * (lg(range)/s + s)) , so
string_sort is asymptotically faster than pure comparison-based algorithms.
Some performance plots of runtime vs. n and log(range) are provided:
Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss.
Invalid arguments cause undefined behaviour.
The lesser of O(N*log(N)) comparisons and O(N*log(K/S + S)) operations worst-case, where:
* N is
* K is the log of the range in bits (32 for 32-bit integers using their full range),
* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size).
The elements in the range [
|std::exception Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.|