根据我(简要)阅读的内容,Java 和 Python 看起来都在其标准库中使用了 timsort,而 C 的 stdlib 中的排序方法称为 qsort,因为它曾经是快速排序。
目前典型语言在其标准库中实现了哪些算法?为什么选择该算法?另外,C 是否偏离了快速排序?
我知道这个问题缺乏“[我]面临的实际问题”,并且对某些人来说可能看起来是开放式的,但是知道如何/为什么选择某些算法作为标准似乎非常有用,但相对来说没有教过。我还觉得,解决特定于语言(数据类型?)和特定于机器(缓存命中?)的问题的深入答案将提供更多关于不同语言和算法如何工作的见解,而不是uni关心的解释。
In musl http://www.musl-libc.org, 我们用平滑排序 http://www.keithschwarz.com/smoothsort/。从概念上讲,它是堆排序的一种变体(同样是就地排序和 O(n log n) 时间),但它具有一个很好的特性,即对于已排序或接近排序的输入,最坏情况性能接近 O(n)。我不相信这是最好的选择,但使用 O(n log n) 最坏情况的就地算法似乎很难做得更好。
作为 Dijkstra 的一项鲜为人知的发明,也让它变得很酷。 :-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)