【问题标题】:Why quick sort is considered as fastest sorting algorithm?为什么快速排序被认为是最快的排序算法?
【发布时间】:2015-09-06 23:07:13
【问题描述】:

快速排序的最坏情况时间复杂度为 O(n^2),而其他像堆排序和合并排序的最坏情况时间复杂度为 O(n log n) .. 仍然认为快速排序更快...为什么?

【问题讨论】:

  • this
  • 我可以知道原因吗..为什么我的问题被否决了,以便我将来处理这个问题?
  • 是的。我猜它被否决了,因为(1)问题太宽泛了(2)你没有展示你所做的任何工作(例如,谷歌搜索相同的问题并阅读网页,阅读后提出更具体的问题更多关于它,或者写一段代码,分析不同场景下不同的排序算法,然后问一个关于你的代码的问题等。)也请阅读how-to-ask
  • 好的...我会在以后处理这个...我是这个领域的新手,所以我不太了解...虽然我已经用谷歌搜索了它.. .但我无法理解那些...我无法找到一个清晰易懂的解释..所以我把它贴在这里...

标签: sorting big-o quicksort mergesort heapsort


【解决方案1】:

附带说明,如果对整数数组进行排序,那么计数/基数排序是最快的。

一般来说,归并排序比快速排序做更多的移动,但比较少。合并排序的典型实现使用与原始数组相同大小的临时数组,或大小的 1/2(将第二半排序为后半,将前半排序为临时数组,将临时数组+第二半排序为原始数组) ,因此它需要比快速排序更多的空间,快速排序最好只需要 log2(n) 层嵌套,并且为了避免最坏情况的嵌套,可以使用嵌套检查并将快速排序更改为堆排序,(这称为 introsort)。

如果比较开销大于移动开销,则归并排序更快。比较比移动花费更长的时间的一个常见示例是对指向字符串的指针数组进行排序。仅移动(4 或 8 字节)指针,而字符串可能会大得多(对于大量字符串来说类似)。

如果要排序的数据有大量预排序,那么 timsort(固定大小的运行)或“自然”合并排序(可变大小的运行)会更快。

【讨论】:

    【解决方案2】:

    虽然快速排序确实具有 O(n^2) 的最坏情况时间复杂度,但只要快速排序实现正确随机化输入,其平均情况(预期)运行时间为 O(n^2) em>O(n log n)。

    此外,与其他流行的选择(例如归并排序)相比,在实践中重要的由渐近符号隐藏的常数因子非常小。因此,在预期中,尽管最坏情况界限不那么可口,但快速排序将优于其他 O(n log n) 比较排序

    【讨论】:

      【解决方案3】:

      不完全一样。快速排序在大多数情况下是最好的,但是它的悲观时间复杂度可能是 O(n^2),但这并不意味着它总是如此。问题在于选择正确的支点,如果选择正确,时间复杂度为 O(n log n)。 此外,快速排序是最便宜/最容易实现的方法之一。

      【讨论】:

        猜你喜欢
        • 2021-07-27
        • 2018-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2010-12-04
        相关资源
        最近更新 更多