【发布时间】:2015-08-16 10:58:19
【问题描述】:
Vec 提供了一种排序方法(通过Deref 实现),但LinkedList 没有。 Rust 标准库中是否有通用算法允许对LinkedLists 进行排序?
【问题讨论】:
-
我怀疑是这样,销毁列表、分配另一个容器并重新创建另一个列表是可行的解决方案吗?因为排序链表效果不好。
-
为什么说排序链表效果不好?合并排序是对链表进行排序的好方法...
-
@wspeirs 因为链表很慢。使用
LinkedList → Vec → LinkedList几乎肯定会比就地排序更快。为什么你还有LinkedList? -
@wspeirs:理论和实践的问题在于它们只是在理论上是相同的。在这种情况下,虽然您确实可以使用链表获得 O(N log N) 复杂性,但实际上由于缓存未命中和恒定因素,它通常很慢。 C++ 提供了
list.sort(),因为std::sort需要随机访问迭代器,因此需要专门的版本;但是后来 C++ 还提供了list.size(),它阻止了 O(1) 拼接,所以我不确定这是一个好主意。 -
@Veedrac 我们还没有找到一种方法来使类似
RandomAccessIterator的抽象工作允许排序。当前的 RAI 提供只读访问权限。
标签: rust