Rust的内置`sort`使用什么排序算法?

时间:2019-02-24 13:49:12

标签: algorithm sorting rust

built-in [T]::sort method使用什么算法?可以看看该方法的代码吗?

2 个答案:

答案 0 :(得分:6)

根据文档:

sort

  

当前实施方式

     

当前算法是一种受timsort启发的自适应迭代合并排序。在切片几乎被排序或由两个或多个依次连接的排序序列组成的情况下,它的设计速度非常快。

     

此外,它会分配临时存储空间,其大小为自身大小的一半,但是对于短片,则使用非分配插入排序。

对于标准库的其余部分以及整个编译器,源是available on GitHub

sort_unstable

  

当前实施方式

     

当前算法基于Orson Peters的pattern-defeating quicksort,该算法将随机快速排序的快速平均情况与堆排序的最坏情况相结合,同时在具有特定模式的切片上实现了线性时间。它使用一些随机化方法来避免退化的情况,但是使用固定的种子来始终提供确定性的行为。

     

通常比稳定排序更快,除非在某些特殊情况下(例如当切片由几个串联的排序序列组成时。

来源也是available on GitHub

(强调是我的)

答案 1 :(得分:2)

我认为标准答案是阅读精美手册;-)

https://doc.rust-lang.org/std/primitive.slice.html#current-implementation-3

是的,可以通过单击每个已记录项目右侧的src链接来查看代码。对于sort方法,这将导致:

https://doc.rust-lang.org/src/alloc/slice.rs.html#206-210

它使用一个专用的merge_sort函数,该函数在此处定义:

https://doc.rust-lang.org/src/alloc/slice.rs.html#888-990