Boost C++ 库

...世界上最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

Next

Boost.Sort

Steven Ross

Francisco Tapia

Orson Peters

目录

1.- 简介
2.- 单线程算法
2.0.- 概述
2.1.-Spreadsort
概述
简介
重载
性能
调优
Spreadsort
头文件 <boost/sort/spreadsort/spreadsort.hpp>
整数排序
浮点数排序
字符串排序
原理
定义
常见问题
致谢
参考文献
历史
Boost.Sort C++ 参考
头文件 <boost/sort/pdqsort/pdqsort.hpp>
头文件 <boost/sort/spreadsort/float_sort.hpp>
头文件 <boost/sort/spreadsort/integer_sort.hpp>
头文件 <boost/sort/spreadsort/spreadsort.hpp>
头文件 <boost/sort/spreadsort/string_sort.hpp>
2.2.- pdqsort
简介
用法
基准测试
最佳情况
平均情况
最坏情况
不良分区
2.3.- spinsort
描述
基准测试
编程
2.4.- flat_stable_sort
描述
基准测试
编程
2.5.- Linux 基准测试
接近有序的数据
复杂数据(多种类型)
2.6.- Windows 基准测试
接近有序的数据
复杂数据(多种类型)
3.- 并行算法
3.1- block_indirect_sort
描述
基准测试
编程
内部描述
设计过程
3.2.- Sample_Sort
描述
编程
3.3.- Parallel_stable_sort
描述
编程
3.4- Linux 基准测试
3.5- Windows 基准测试
4.- 参考文献
5.- 感谢

Boost 排序库的目标是为用户提供最现代、快速和内存高效的排序算法。

该库提供稳定和不稳定的排序算法,包括单线程和并行版本。

这些算法不使用任何其他库或实用程序,您只需要包含 boost/sort/sort.hpp 或更具体的头文件之一。并行算法需要符合 C++11 标准的编译器。

单线程算法

                  |       |                            |                                            | 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 |
                  |       |                            |                                            |                     |

  • spreadsort 是一种极其快速的混合基数排序算法,由 Steven Ross 设计和开发。
  • pdqsort 是对快速排序算法的改进,由 Orson Peters 设计和开发。
  • spinsort 是一种稳定的排序算法,对于随机或接近有序的数据速度很快,由 Francisco Tapia 设计和开发。
  • flat_stable_sort 是一种稳定的排序算法,使用非常少的额外内存(大约是数据大小的 1%),提供 spinsort 速度的 80% - 90%,由 Francisco Tapia 设计和开发。
并行算法

                      |       |                        |                              |
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           |
                      |       |                        |                              |

  • Sample_sort 是由 Francisco Tapia 完成的 样本排序算法 的实现。
  • Parallel_stable_sort 基于样本排序算法,但使用 sample_sort 一半的内存,由 Francisco Tapia 构思和实现。
  • Block_indirect_sort 是一种新颖的高速并行排序算法,具有低额外内存消耗,由 Francisco Tapia 构思和实现。

块大小 (block_size) 是算法的内部参数,为了实现最高速度,它会根据要排序的对象的大小按照下表进行更改。字符串使用 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     |
                                |        |         |         |         |         |         |          |


Next