Vec
提供了排序方法(通过Deref
实现),但LinkedList
没有。 Rust标准库中是否有一个通用算法允许对LinkedList
进行排序?
答案 0 :(得分:5)
我认为没有内置的方法可以做到这一点。但是,您可以将列表内容移动到Vec
,对其进行排序并将其重新转换为链接列表:
let mut vec: Vec<_> = list.into_iter().collect();
vec.sort();
let list: LinkedList<_> = vec.into_iter().collect();
这个想法甚至不像看起来那么糟糕 - 见here。虽然存在用于对链接列表进行排序的相对快速的算法做,但它们不会像平面数组排序那样提供高速缓存性能。
答案 1 :(得分:0)
请参阅this question,它非常相似但不是特定语言。
前段时间我调查了这个主题(使用C,但也适用于Rust)。
除了转换为矢量&amp;排序,然后转换回链表。合并排序通常是对链表进行排序的最佳方法。
同样的方法可用于双链和单链表(两个方向都有链接没有优势)。
以下是一个示例originally from this answer,我ported to C。
这是合并排序的一个很好的例子,但经过一些进一步的调查后,我发现Mono's eglib mergesort更有效率,特别是当列表已经部分排序时。
将此端口从C端口移植到Rust不应该太困难。