algorithm - 比 O(n log n) 更快的通用且实用的排序算法?

标签 algorithm sorting computer-science big-o

是否有运行速度超过 O(n log n) 的通用元素实用算法(不同于计数排序或桶排序)?

最佳答案

很多人都提到了比较排序算法的信息论 Ω(n lg n) 约束,在比较排序中无法打破。 (This earlier question 探讨了为什么会这样。)

但是,有些类型的比较排序虽然在一般情况下不会破坏 O(n lg n),但可以证明在已经在某种程度上预排序的输入上运行得更快。例如,Dijkstra 的 smoothsort 在 O(n) 中对已排序的输入运行 O(n lg n) 最坏情况行为。我最喜欢的一种,Cartesian tree sort ,可证明在一些指标中充分利用了预排序。例如,它可以在时间 O(n) 内对具有恒定数量的递增或递减子序列的任何序列进行排序,在最坏的情况下优雅地降级到 O(n lg n)。

关于非比较排序的主题,有一些著名但棘手的整数排序算法通过巧妙的位操作技巧超过 O(n lg n)。最著名的整数排序算法是一种可以在 O(n √lg lg n) 内排序的随机算法,而最快的整数排序确定性算法运行时间为 O(n lg lg n)。您可能听说过基数排序的复杂度为 O(n),尽管从技术上讲它是 O(n lg U),其中 U 是要排序的数组中的最大值。

简而言之,不,你不能比 O(n lg n) 做得更好,但如果你对输入有所了解,你可以做得更好。

关于algorithm - 比 O(n log n) 更快的通用且实用的排序算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973045/

相关文章:

algorithm - 如何从 2 个列表中确定最佳组合

algorithm - 生成所有可能的组合

ruby - 根据值然后键对ruby中的哈希进行排序

algorithm - 确定哪个排序排列对数组进行排序

python - 使用用户定义的规则对项目进行排序

computer-science - 查找图形的外边缘

arrays - 以下算法在未排序数组中查找最小值的复杂性

java - 将对象列表中的双列表对象转换为字符串

java - 一点java中的类设计,一点模式?

algorithm - 最被低估或鲜为人知但有用的算法是什么?