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 + m2 |
nm |
|
| 位序 | 基于构建排序网络的方法 | nlog2n |
nlog2n |
nlog2n |
| 冒泡 | 对于排序或反转输入来说很糟糕 | n2; 2 |
1 |
1 |
| 鸡尾酒 | 比冒泡排序有轻微的性能提升 | n2 |
n |
1 |
| 组合 | 当数据几乎排序时加速 | n2 |
nlogn |
1 |
| 循环 | 使用最少的写入量,对于有限TBW的内存很好 | n2 |
n2 |
1 |
| 侏儒 | 简单而缓慢,一次处理一个元素 | n2 |
n |
1 |
| 堆 | 独立于数据分布 | nlogn |
nlogn |
1 |
| 弱堆 | 独立于数据分布,减少了比较次数 | nlogn |
nlogn |
1 |
| N-堆 | 应该比默认堆更快。N = 3 | nlogn |
nlogn |
1 |
| 自下而上堆 | 减少比较次数的堆排序的升级版本 | nlogn |
nlogn |
1 |
| 插入 | 简单,但不如快速排序、堆排序或归并排序有效 | n2; 2 |
1 |
1 |
| 归并 | 独立于数据分布 | nlogn |
nlogn |
n |
| 自下而上归并 | 与数据分布无关,归并排序的修改版本 | nlogn |
nlogn |
n |
| 奇偶排序 | 适用于具有本地互连的处理器 | n2 |
n |
1 |
| 奇偶批处理器 | 奇偶排序的更有效版本 | log2n |
log2n |
logn2 |
| 煎饼排序 | 交换数据很多,但在实践中并不太有效 | n3; 2n - 3 |
n2 |
n |
| 快速排序 | 对于排序或反转输入来说很糟糕 | n2 |
nlogn |
logn |
| 快速排序的双重版本 | 快速排序的增强版本 | n2 |
2nlnn |
logn |
| Ksort | 快速排序的变体,在小于700万个元素时比堆排序更快 | n2 |
nlog2n |
logn |
| 选择排序 | 所有算法中最少交换次数 | n2; n |
n2; 1 |
1 |
| 双选择排序 | 修改后的选择排序,工作负载更大,但效率更高 | n2; n |
n2; 1 |
高于选择排序 |
| 希尔排序 | 它是插入排序的优化版本 | n3/2 或 nlogn2 |
nlogn |
1 |
| 慢速排序 | 它很慢,谁会需要它呢? | |||
| 平滑排序 | 堆排序的变体,适用于接近排序的数据 | nlogn |
n |
1 |
| Stooge排序 | 它比慢速排序快一点 | n2.7095 |
n |
计划在将来实现新的算法