6 个版本
0.1.2 | 2019 年 7 月 3 日 |
---|---|
0.1.1 | 2018 年 6 月 25 日 |
0.0.3 | 2018 年 6 月 19 日 |
#1150 in 算法
29 每月下载次数
14KB
200 行
external_sort
为结构体提供外部排序功能,允许快速排序极大数据流。
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
external_sort = "^0.1.1"
并将其添加到您的 crate 根目录
extern crate external_sort;
示例
以下示例展示了如何使用 external_sort
对简单结构体向量进行排序。
请注意,您的结构体必须 impl
Ord
,Clone
,以及 serde
的 Serialize
和 Deserialize
特性。此外,为了让 external_sort
跟踪其内存缓冲区使用情况,您的结构体必须能够报告其大小(通过 external_sort::ExternallySortable
)
extern crate external_sort;
#[macro_use]
extern crate serde_derive;
use external_sort::{ExternalSorter, ExternallySortable};
#[derive(Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord)]
struct Num {
the_num: u32,
}
impl Num {
fn new(num: u32) -> Num {
Num { the_num: num }
}
}
impl ExternallySortable for Num {
fn get_size(&self) -> u64 {
4
}
}
fn main() {
let unsorted = vec![
Num::new(5),
Num::new(2),
Num::new(1),
Num::new(3),
Num::new(4),
];
let sorted = vec![
Num::new(1),
Num::new(2),
Num::new(3),
Num::new(4),
Num::new(5),
];
let external_sorter = ExternalSorter::new(16, None);
let iter = external_sorter.sort(unsorted.into_iter()).unwrap();
for (idx, i) in iter.enumerate() {
assert_eq!(i.unwrap().the_num, sorted[idx].the_num);
}
}
如果您的结构体无法报告其大小,只需从 get_size()
返回 1
,然后在调用 ExternalSorter::new()
时传递对象数量(而不是字节数)
依赖关系
~1–2MB
~39K SLoC