[英]What sort algorithm provides the best worst-case performance?
绝对最差情况下最快的已知排序算法是什么? 我不在乎最好的情况,并且即使有关系,也要假设一个庞大的数据集。
取决于数据。 例如,对于整数(或任何可以表示为整数的东西),最快的是基数排序 ,对于固定长度的值,其最坏情况下的复杂度为O( n )。 最佳通用比较排序算法的复杂度为O( n log n )。
如果您有一个巨大的数据集(即比可用内存大得多),则可能会将数据存储在磁盘/磁带/具有昂贵随机访问权限的东西上,因此您需要外部排序。
在这种情况下,合并排序效果很好; 与大多数其他类型不同,它不涉及随机读取/写入。
它在很大程度上与数据集的大小以及该集合是否已排序(或当前的顺序)有关。
整个书籍都是根据搜索/排序算法编写的。 假设最坏的情况下,您将不会找到“绝对最快”的情况,因为不同的类别具有不同的最坏情况。
如果您有足够大的数据集,则可能正在考虑对单个数据仓进行排序,然后使用merge-sort合并这些仓。 但是在这一点上,我们正在谈论的数据集非常庞大,足以比主存更大。
我猜最正确的答案是“取决于”。
它取决于数据类型和资源类型。 例如,有一些并行算法击败了Quicksort,但是考虑到您如何问这个问题,您不太可能访问它们。 有时,一种算法的“最坏情况”是另一种算法的“最佳情况”(使用Quick and Merge,几乎排序的数据有问题,但是使用简单得多的技术,速度很快)。
假设随机排序的数据,快速排序。
O(nlog n)是平均情况,最坏情况是O(n ^ 2),但这需要高度非随机的数据。
您可能需要描述数据集特征。
有关Quicksort和Mergesort的比较,请参阅快速排序与合并排序 ,这是大多数情况下较好的两种算法。
这完全取决于您要排序的数据。 不同的算法对于不同的数据具有不同的速度。 O(n)算法可能比O(n ^ 2)算法要慢,这取决于您使用的是哪种数据。
我一直喜欢合并排序,因为它很稳定(这意味着如果两个元素从排序角度来看是相等的,那么它们的相对顺序就被明确保留了),但是quicksort也很好。
图灵机的最低上限是通过merge sort实现的,即O(n log n)。 尽管在某些数据集上快速排序可能会更好。
除非您使用特殊的硬件(例如,硬件支持的磁珠分类 ,其他非比较分类),否则您不能低于O(n log n)。
关于指定问题的重要性:基数排序可能是最快的,但是仅当您的数据具有固定长度的键(可以分解为独立的小片段)时才可用。 这限制了它在一般情况下的用处,并解释了为什么没有更多人听说过它。
http://en.wikipedia.org/wiki/Radix_sort
PS这是O(k * n)算法,其中k是密钥的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.