什么样的算法提供最好的最坏情况性能?

GBa*_*GBa 3 sorting algorithm

对于绝对最坏情况,最快的已知排序算法是什么?我不关心最好的情况,并假设一个巨大的数据集,如果这甚至重要.

mko*_*yak 17

确保你已经看到了这个:

可视化排序算法 - 它帮助我决定使用哪种alg.

  • 可视化排序算法是体验不同算法的绝佳方式,但也值得注意的是http://www.hatfulofhollow.com/posts/code/visualisingsorting/index.html (2认同)

var*_*tec 9

取决于数据.例如,对于整数(或任何可以表示为整数的东西),最快的是基数排序,对于固定长度值具有最差的O(n)的复杂情况.最佳通用比较排序算法具有O(n log n)的复杂度.


Ric*_*and 7

如果使用二进制比较,则最佳排序算法需要完成O(N log N)比较.如果你正在寻找一些具有良好的最坏情况下的表现,我想看看归并堆排序,因为它们是O(N日志N)在所有情况下的算法.

如果所有数据都适合内存,HeapSort很好,而MergeSort允许您更好地进行磁盘排序(但总体上需要更多空间).

维基百科排序算法页面上提到的其他不太知名的算法都具有O(n log n)最差情况性能.(根据mmyers的评论)


Shu*_*oUk 5

对于预算无限的人

滑稽但正确: 排序网络交易空间(以实际硬件术语)优于O(n log n)排序!

如果不采用这种硬件(不太可能使用),您可以获得最佳比较类型 O(n log n)的下限

O(n log n)最坏情况表现(无特定顺序)

击败n log n

如果您的数据适合它,您可以超过n log n限制,但也要关注输入数据中的位数

RadixBucket可能是最着名的例子.如果没有关于您的特定要求的更多信息,那么更深入地考虑这些要求并不富有成效.