【发布时间】:2011-06-29 15:52:52
【问题描述】:
【问题讨论】:
-
维基百科表示未指定具体算法。
【问题讨论】:
传统上使用两种算法。
std::sort 最有可能使用 QuickSort,或者至少是 QuickSort 的一个变体,称为 IntroSort,当递归太深时,它会“退化”为 HeapSort。
来自标准:
复杂性:O(N log(N)) 次比较。
std::stable_sort 最有可能使用MergeSort,因为稳定性要求。但是请注意,MergeSort 需要额外的空间才能提高效率。
来自标准:
复杂性:最多进行 N log2(N) 次比较;如果有足够的额外内存可用,则为 N log(N)。
我还没有看到实现 TimSort 的 std::sort 很有前途,并且已在 Python(实际上是为它设计的)、Java 和 Android(迄今为止)中采用。
【讨论】:
QuickSort 的最坏情况是O(N^2),您是否介意更新答案,因为它不能再用于 C++11+ 投诉实现?
因为快速排序 (N^2) 的最坏复杂度很高,并且在链接列表上实现起来相对困难。我认为使用快速排序不会完成排序
【讨论】:
std::sort 不适用于链表,所以这不是问题。
来自维基百科 -
特定的排序算法不是强制性的,并且可能因实现而异。 Sort Wiki Link
【讨论】:
我想是的。 std::list 有一个 sort 方法,或者你可以调用 sort ,它需要 2 个迭代器,begin 和 end。
【讨论】: