如何仅使用标准库对LinkedList进行排序?

时间:2015-06-02 14:59:26

标签: rust

Vec提供了排序方法(通过Deref实现),但LinkedList没有。 Rust标准库中是否有一个通用算法允许对LinkedList进行排序?

2 个答案:

答案 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更有效率,特别是当列表已经部分排序时。

这是portable version of it

将此端口从C端口移植到Rust不应该太困难。