Boost.Sort (original) (raw)

The goal of the Boost Sort Library is provide to the users, the most modern, fast, and memory-efficient sorting algorithms.

This library provides stable and unstable sorting algorithms, in single threaded and parallel versions.

These algorithms do not use any other library or utility, you only need to include boost/sort/sort.hpp or one of the more specific headers. The parallel algorithms need a C++11 compliant compiler.

Single Thread Algorithms

| | | | Comparison | Algorithm |Stable | Additional memory |Best, average, and worst case | method | ------------------+-------+----------------------------+--------------------------------------------+---------------------+ spreadsort | no | key_length | N, N sqrt(LogN), min(N logN, N key_length) | Hybrid radix sort | pdqsort | no | Log N | N, N LogN, N LogN | Comparison operator | spinsort | yes | N / 2 | N, N LogN, N LogN | Comparison operator | flat_stable_sort | yes |size of the data / 256 + 8K | N, N LogN, N LogN | Comparison operator | | | | | |

Parallel Algorithms

| | | | Algorithm |Stable | Additional memory |Best, average, and worst case | ----------------------+-------+------------------------+------------------------------+ block_indirect_sort | no |block_size * num_threads| N, N LogN , N LogN | sample_sort | yes | N | N, N LogN , N LogN | parallel_stable_sort | yes | N / 2 | N, N LogN , N LogN | | | | |

The block_size is an internal parameter of the algorithm, which in order to achieve the highest speed, changes according to the size of the objects to sort according to the next table. The strings use a block_size of 128.

| | | | | | | | object size (bytes) | 1 - 15 | 16 - 31 | 32 - 63 | 64 - 127|128 - 255|256 - 511| 512 - | --------------------------------+--------+---------+---------+---------+---------+---------+----------+ block_size (number of elements) | 4096 | 2048 | 1024 | 768 | 512 | 256 | 128 | | | | | | | | |