12个稳定版本
1.2.10 | 2020年8月16日 |
---|---|
1.2.9 | 2020年8月13日 |
1.2.2 | 2020年7月25日 |
在算法中排名第682
每月下载量51次
83KB
1.5K SLoC
sorting_rs
Rust实现的排序算法。
使用方法
- 在Cargo.toml中添加此依赖,并考虑其版本
[dependencies]
sorting_rs = "1.2.0"
- 在Rust代码中使用可用的排序算法
use sorting_rs::*;
- 每个排序函数的API几乎相同:你只需要传递可变引用:
&mut [T]
,或者vec![T, T, T, ...]
。T
应该具有PartialOrd
特性,有时你可能需要Copy
或Clone
特性,尽管所有实现都尽量减少这种额外要求。 - 有关算法的起源和实现细节的更多信息,请阅读模块文档。《维基百科》也是一个不错的起点。[链接](https://en.wikipedia.org/wiki/Sorting_algorithm)
此库包含以下排序算法
排序算法 | 功能和缺点 | 最坏情况性能 O(): 比较次数;交换次数 | 最好情况性能 O(): 比较次数;交换次数 | 空间复杂度 O() |
---|---|---|---|---|
Bingo | 如果存在重复项,则旨在比选择排序更快 | n + m 2 |
nm |
|
位序 | 基于构建排序网络的方法 | nlog 2 n |
nlog 2 n |
nlog 2 n |
冒泡 | 对于排序或反转输入来说很糟糕 | n 2 ; 2 |
1 |
1 |
鸡尾酒 | 比冒泡排序有轻微的性能提升 | n 2 |
n |
1 |
组合 | 当数据几乎排序时加速 | n 2 |
nlogn |
1 |
循环 | 使用最少的写入量,对于有限TBW的内存很好 | n 2 |
n 2 |
1 |
侏儒 | 简单而缓慢,一次处理一个元素 | n 2 |
n |
1 |
堆 | 独立于数据分布 | nlogn |
nlogn |
1 |
弱堆 | 独立于数据分布,减少了比较次数 | nlogn |
nlogn |
1 |
N-堆 | 应该比默认堆更快。N = 3 | nlogn |
nlogn |
1 |
自下而上堆 | 减少比较次数的堆排序的升级版本 | nlogn |
nlogn |
1 |
插入 | 简单,但不如快速排序、堆排序或归并排序有效 | n 2 ; 2 |
1 |
1 |
归并 | 独立于数据分布 | nlogn |
nlogn |
n |
自下而上归并 | 与数据分布无关,归并排序的修改版本 | nlogn |
nlogn |
n |
奇偶排序 | 适用于具有本地互连的处理器 | n 2 |
n |
1 |
奇偶批处理器 | 奇偶排序的更有效版本 | log 2 n |
log 2 n |
logn 2 |
煎饼排序 | 交换数据很多,但在实践中并不太有效 | n 3 ; 2n - 3 |
n 2 |
n |
快速排序 | 对于排序或反转输入来说很糟糕 | n 2 |
nlogn |
logn |
快速排序的双重版本 | 快速排序的增强版本 | n 2 |
2nlnn |
logn |
Ksort | 快速排序的变体,在小于700万个元素时比堆排序更快 | n 2 |
nlog 2n |
logn |
选择排序 | 所有算法中最少交换次数 | n 2 ; n |
n 2 ; 1 |
1 |
双选择排序 | 修改后的选择排序,工作负载更大,但效率更高 | n 2 ; n |
n 2 ; 1 |
高于选择排序 |
希尔排序 | 它是插入排序的优化版本 | n 3/2 或 nlogn 2 |
nlogn |
1 |
慢速排序 | 它很慢,谁会需要它呢? | |||
平滑排序 | 堆排序的变体,适用于接近排序的数据 | nlogn |
n |
1 |
Stooge排序 | 它比慢速排序快一点 | n 2.7095 |
n |
计划在将来实现新的算法