#排序 #no-std

no-std count_sort

适用于大型数据集且值域范围较小的 O(n) 排序库

11 个版本

0.3.0 2019 年 10 月 27 日
0.2.0 2019 年 10 月 27 日
0.1.8 2019 年 7 月 11 日
0.1.3 2019 年 4 月 13 日

#2122算法

每月 28 次下载

MIT 许可证

6KB
71

Count Sort

Build Status

实现计数排序算法的快速排序库,时间复杂度为 O(n + k)。适用于快速对具有较小可能值范围的大量数据进行排序。现在支持 no_std

目前仅支持 u8, u16, i8 和 i16。

目标

提高性能并减少内存使用。

性能

复制和排序以下指定长度的随机生成的 Vec 的时间。展示了哪些长度更快,以及哪些长度的开销太大。

长度 sort_u8 .sort() .sort_unstable() dmsort
0 9.3944 纳秒 11.633 纳秒 11.887 纳秒 11.427 纳秒
1 24.074 纳秒 25.148 纳秒 25.700 纳秒 25.442 纳秒
4 215.06 纳秒 48.536 纳秒 49.364 纳秒 110.13 纳秒
16 370.30 纳秒 223.30 纳秒 238.12 纳秒 429.16 纳秒
64 935.84 纳秒 2.1638 微秒 1.4000 微秒 1.8457 微秒
256 2.0890 微秒 11.445 微秒 6.5242 微秒 7.3119 微秒
1024 3.8468 微秒 56.754 微秒 27.414 微秒 30.193 微秒
4096 7.3327 微秒 255.55 微秒 77.200 微秒 85.214 微秒
16384 19.219 微秒 1.0981 毫秒 233.50 微秒 265.55 微秒
65536 73.449 微秒 4.6771 毫秒 794.74 微秒 914.10 微秒
262144 296.26 微秒 19.938 毫秒 3.1294 毫秒 3.4867 毫秒

用法

在 Cargo.toml 中添加依赖项

[dependencies]
count_sort = "0.3"

使用 sort_u8、sort_u16、sort_i8、sort_i16 中的适当函数

extern crate count_sort;

fn main () {
	let mut data: Vec<u8> = vec![252, 107, 81, 35, 185, 18, 175, 130, 37, 166];
	count_sort::sort_u8(&mut data);
	println!("{:?}", data);

}

无运行时依赖