在阅读 Rust crate 的文档时Voracious Sort我注意到它比 Rust 标准库提供的基于比较的算法(PDQ)快得多,并且有稳定版本和就地版本可用。
为什么我们不使用基数来表示一切?当然,基数排序只能应用于整数类型。
但是,大多数其他类型的数据都可以(或多或少容易地)转换为整数类型(常见的示例是 IEEE754 浮点数或字符串)。我的问题是:
哪些类型的数据需要(或明显更快)通过比较进行排序,为什么?
我确实知道其他算法对于输入数据的某些分布更好。我问的是数据类型,而不是它们的分布。
您可以实际上对几乎任何类型的键使用基数排序。
问题是如何为通用排序函数编写接口。
要使用通用的基于比较的排序函数,您只需要提供一个比较器,它可以告诉您一个键是否大于或小于另一个键。
要使用通用的 radx 排序函数,您需要实现键的 view,将它们作为数字序列呈现给排序函数。对于除最简单类型之外的所有按键来说,这可能相当困难,而且效率不高。这不是您只想调用排序函数而要做的事情,因此没有足够的需求将通用基数排序包含在标准库中。