快速排序的最坏情况时间复杂度为O(n ^ 2),而其他类似堆排序和合并排序的最坏情况时间复杂度为O(n log n)..但快速排序被认为更快...为什么呢?
答案 0 :(得分:1)
虽然快速排序的最坏情况时间复杂度为 O(n ^ 2),但只要快速排序实现正确随机化输入,其平均情况(预期)运行时间为< em> O(n log n)。
此外,与其他流行选择(如合并排序)相比,在实践中隐含的渐近符号隐藏的常数因子非常小。因此,在期望中,快速排序将胜过其他 O(n log n)比较排序,尽管最差情况界限较少
答案 1 :(得分:1)
另一方面,如果对整数数组进行排序,那么计数/基数排序是最快的。
通常,合并排序会比快速排序更多移动但比较少。合并排序的典型实现使用与原始数组大小相同的临时数组,或者大小的1/2(排序后半部分到下半部分,将前半部分分类为临时数组,将临时数组+第二部分合并为原始数组)因此它需要比快速排序更多的空间,最佳只需要log2(n)嵌套级别,并且为了避免最坏情况嵌套,可以使用嵌套检查并将快速排序更改为堆排序(这称为introsort)。 / p>
如果比较开销大于移动开销,则合并排序更快。比较花费比移动更长的常见示例是将指针数组排序到字符串。只移动(4或8字节)指针,而字符串可能会大得多(对于大量字符串也类似)。
如果要对要排序的数据进行重要的预排序,则timsort(固定大小的运行)或“自然”合并排序(可变大小的运行)将更快。
答案 2 :(得分:0)
不完全那样。 Quicksort在大多数情况下是最好的,但它的时间复杂度可以是O(n ^ 2),它并不意味着它总是如此。问题在于选择正确的枢轴点,如果选择正确,则时间复杂度为O(n log n)。 此外,quicksort是最便宜/最简单的实施之一。