#排序 #浮点 #浮点数

已删除 quickersort

与稳定Rust兼容的快速排序。同时提供(可选)对高效和健壮的浮点数排序支持

使用旧的Rust 2015

3.0.1 2018年1月30日
3.0.0 2017年5月30日
2.2.0 2016年12月20日
2.1.1 2016年10月14日
1.0.0 2015年7月30日

#55 in #排序

Download history 44/week @ 2023-12-01 74/week @ 2023-12-08 93/week @ 2023-12-15 72/week @ 2023-12-22 26/week @ 2023-12-29 66/week @ 2024-01-05 85/week @ 2024-01-12 67/week @ 2024-01-19 52/week @ 2024-01-26 31/week @ 2024-02-02 86/week @ 2024-02-09 88/week @ 2024-02-16 112/week @ 2024-02-23 101/week @ 2024-03-01 135/week @ 2024-03-08 93/week @ 2024-03-15

451 次月下载
9 个crate中使用 (4 直接)

MIT/Apache

37KB
509

已弃用

实际上已经没有必要使用这个库了。它所有好的功能都已经集成到Rust标准库的 std::sort_unstable 中,它甚至使用了更好的算法。只需使用那个。

quickersort

Build Status Crates.IO

文档

这是 introsort 排序算法的实现。

这是 veddan/rust-introsort 的分支,并进行了一些改进。

要使用 cargo,请将以下内容添加到您的 Cargo.toml

[dependencies]
quickersort = "3.0"

并在您的crate根目录中添加

extern crate quickersort;

接口

该接口与标准库中的 sortsort_by 函数类似。

示例

extern crate quickersort;

fn main() {
    let mut ss = vec!["Introsort", "or", "introspective", "sort", "is",
                      "a", "hybrid", "sorting", "algorithm", "that",
                      "provides", "both", "fast", "average",
                      "performance", "and", "(asymptotically)", "optimal",
                      "worst-case", "performance"];
    quickersort::sort(&mut ss[..]);
    println!("alphabetically");
    for s in ss.iter() { println!("\t{}", s); }
    quickersort::sort_by(&mut ss[..], &|a, b| a.len().cmp(&b.len()));
    println!("\nby length");
    for s in ss.iter() { println!("\t{}", s); }
}

与标准库中的排序函数不同,introsort 不是稳定的排序。

细节

在核心,它是一个双轴快速排序。对于具有许多相等元素的分区,它将使用针对此情况优化的单轴快速排序。它检测快速排序中的过度递归,并在需要时切换到堆排序,保证所有输入的 O(n log(n)) 运行时间。对于小的分区,它使用插入排序而不是快速排序。

std 排序不同,它不分配。

性能

它非常快,在所有我尝试的数据集上都优于标准排序。性能差异取决于数据的特征。在大型、完全随机数组中,introsort 仅比标准排序快 5-10%。然而,如果数据具有少量唯一值或(部分)排序(包括逆序数据),introsort 的性能将大大提高。对于排序数据,introsort 快 ~4-5 倍,而对于唯一值较少的数据,它可以快 20 倍以上。

详细基准数据(目前仅限整数)可用。

浮点数

如果使用“float”特性(默认选项)构建crate,则还包括一个sort_floats函数。浮点数不是Ord,只有PartialOrd,因此不能在它们上使用sortsort_floats使用的排序方式为

| -inf | < 0 | -0 | +0 | > 0 | +inf | NaN |

sort_floats比将实现此排序的比较函数传递给sort_by要高效得多。

依赖项