built-in [T]::sort
method使用什么算法?可以看看该方法的代码吗?
答案 0 :(得分:6)
根据文档:
sort
:
当前实施方式
当前算法是一种受timsort启发的自适应迭代合并排序。在切片几乎被排序或由两个或多个依次连接的排序序列组成的情况下,它的设计速度非常快。
此外,它会分配临时存储空间,其大小为自身大小的一半,但是对于短片,则使用非分配插入排序。
对于标准库的其余部分以及整个编译器,源是available on GitHub。
当前实施方式
当前算法基于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
函数,该函数在此处定义: