Boost
arrow_drop_down
Boost.Sort
M
D

本次发布

spreadsort
spreadsort
作者
Nigel Stewart
Nigel Stewart
贡献者

依赖项

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

根据 Boost Software License, Version 1.0 分发。

全部时间

Francisco Tapia
Francisco Tapia
贡献者
Rene Rivera
Rene Rivera
贡献者
Peter Dimov
Peter Dimov
贡献者
zerotypos-found
zerotypos-found
贡献者
Orson Peters
Orson Peters
贡献者
Mark Santaniello
Mark Santaniello
贡献者
sdarwin
sdarwin
贡献者
Edward Diener
Edward Diener
贡献者
Jeremy Fincher
Jeremy Fincher
贡献者
Casey Carter
Casey Carter
贡献者
Jonathan Emmett
Jonathan Emmett
贡献者
Gabriel Matte
Gabriel Matte
贡献者
MinahilRaza
MinahilRaza
贡献者
Mark Melton
Mark Melton
贡献者
Nikita Kniazev
Nikita Kniazev
贡献者