Boost
arrow_drop_down
Boost.Sort
M
D

本次发布

spreadsort
spreadsort
作者
Peter Dimov
Peter Dimov
贡献者
Nigel Stewart
Nigel Stewart
贡献者
Francisco Tapia
Francisco Tapia
贡献者

依赖项

BOOST SORT

介绍

Boost Sort Library 的目标是为用户提供最现代、最快的排序算法。

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

这些算法不使用任何其他库或实用程序。并行算法需要一个符合 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 分发。

全部时间

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