【问题标题】:Does std::sort implement Quicksort? [duplicate]std::sort 是否实现快速排序? [复制]
【发布时间】:2011-06-29 15:52:52
【问题描述】:

可能重复:
which type of sorting is used in the function sort()?

std::sort 是否实现了快速排序?

【问题讨论】:

  • 维基百科表示未指定具体算法。

标签: c++ algorithm stl


【解决方案1】:

传统上使用两种算法。

std::sort 最有可能使用 QuickSort,或者至少是 QuickSort 的一个变体,称为 IntroSort,当递归太深时,它会“退化”为 HeapSort

来自标准:

复杂性:O(N log(N)) 次比较。

std::stable_sort 最有可能使用MergeSort,因为稳定性要求。但是请注意,MergeSort 需要额外的空间才能提高效率。

来自标准:

复杂性:最多进行 N log2(N) 次比较;如果有足够的额外内存可用,则为 N log(N)。

我还没有看到实现 TimSortstd::sort 很有前途,并且已在 Python(实际上是为它设计的)、Java 和 Android(迄今为止)中采用。

【讨论】:

  • @maxim-yegorushkin:维基百科的文章似乎也声称 introsort 切换到插入排序而不是 heapsort :/ en.wikipedia.org/wiki/Sort_(C%2B%2B) “例如,GNU 标准 C++ 库使用混合排序算法:introsort首先执行,最大深度由 2×log2 n 给出,其中 n 是元素的数量,然后对结果进行插入排序。”
  • 因为QuickSort 的最坏情况是O(N^2),您是否介意更新答案,因为它不能再用于 C++11+ 投诉实现?
【解决方案2】:

因为快速排序 (N^2) 的最坏复杂度很高,并且在链接列表上实现起来相对困难。我认为使用快速排序不会完成排序

【讨论】:

  • std::sort 不适用于链表,所以这不是问题。
【解决方案3】:

来自维基百科 -

特定的排序算法不是强制性的,并且可能因实现而异。 Sort Wiki Link

【讨论】:

  • 虽然在这种情况下可能是真的,但我会非常小心我在维基百科上阅读的内容。当涉及到参考时,请引用标准。
【解决方案4】:

我想是的。 std::list 有一个 sort 方法,或者你可以调用 sort ,它需要 2 个迭代器,begin 和 end。

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2012-05-26
    • 2013-08-09
    • 2016-01-10
    相关资源
    最近更新 更多