C++ 03 新增于 Boost 1.58.0
类别: 算法
高性能模板排序函数。
本次发布
依赖项
BOOST SORT
介绍
Boost Sort 库的目的是为用户提供最现代化、最快速的排序算法。
本库提供稳定和非稳定的排序算法,单线程和并行版本。
这些算法不使用任何其他库或实用程序。并行算法需要符合 C++11 的编译器。
还提供详细的 Boost API 文档。
单线程算法
算法 | 稳定 | 附加内存 | 最佳、平均和最差情况 | 比较方法 |
---|---|---|---|---|
spreadsort | 否 | 键长 | N, N sqrt(LogN), | 混合基数排序 |
min(N logN, N 键长) | ||||
pdqsort | 否 | Log N | N, N LogN, N LogN | 比较运算符 |
spinsort | 是 | N / 2 | N, N LogN, N LogN | 比较运算符 |
flat_stable_sort | 是 | 数据大小 / 256 + 8K | N, N LogN, N LogN | 比较运算符 |
-
spreadsort 是一个由 Steven Ross 设计和开发的 新颖的混合基数排序算法,速度极快。 (论文)
-
pdqsort 是由 Orson Peters 设计和开发的 快速排序算法的改进版。 (论文)
-
spinsort 是一个稳定排序,对于随机数据和接近有序的数据速度都很快,由 Francisco Tapia 设计和开发。
-
flat_stable_sort 是一个稳定排序,附加内存小(约为数据大小的 1%),速度达到 spinsort 的 80%-90%,对于随机数据和接近有序的数据速度都很快,由 Francisco Tapia 设计和开发。 (论文)
并行算法
算法 | 稳定 | 附加内存 | 最佳、平均和最差情况 |
---|---|---|---|
block_indirect_sort | 否 | 块大小 * 线程数 | N, N LogN , N LogN |
sample_sort | 是 | N | N, N LogN , N LogN |
parallel_stable_sort | 是 | N / 2 | N, N LogN , N LogN |
-
Sample_sort 是由 Francisco Tapia 实现的 Samplesort 算法。
-
Parallel_stable_sort 基于 samplesort 算法,但内存使用量是 sample_sort 的一半,由 Francisco Tapia 设计和实现。
-
Block_indirect_sort 是一个新颖的并行排序算法,速度非常快,附加内存消耗低,由 Francisco Tapia 设计和实现。 (论文)
块大小是算法的一个内部参数,为了达到最高速度,该参数会根据要排序的对象的大小进行调整,具体如下表所示。字符串使用块大小 128。
对象大小(字节) | 1 - 15 | 16 - 31 | 32 - 63 | 64 - 127 | 128 - 255 | 256 - 511 | 512 - |
---|---|---|---|---|---|---|---|
块大小(元素数量) | 4096 | 2048 | 1024 | 768 | 512 | 256 | 128 |
Installation
- 此库是仅头文件库。
- 无需链接任何静态或动态库。只需要一个 C++11 编译器
- 只需要包含 boost/sort/sort.hpp 文件
作者和版权
此库已集成到 Boost 库中。
版权 2017