【问题标题】:Which sorting algorithm is used in GCC?GCC中使用哪种排序算法?
【发布时间】:2011-08-28 13:27:15
【问题描述】:

cplusplus.comstd::sort定义复杂度:

复杂性

平均大约 N*logN 次比较(其中 N 是最后一个)。 在最坏的情况下,最多 N2,具体取决于库实现使用的特定排序算法。

我的应用程序在运行时间上有一些限制。所以我需要知道是否应该实现自己的排序算法,否则只会浪费时间。它们是用 gcc 编译的,所以我需要知道 gcc 使用哪种排序算法。

【问题讨论】:

  • 你能用比比较排序更好的方法吗?
  • 只有在非常特殊的情况下,您才能获得比精心编写的 STL 提供的更快的程序。 STL 背后的想法之一就是使用 C++ 的工具来避免代价高昂的函数调用,并尽可能内联地进行操作。如果你得到更快的东西,成本将是巨大的。在深入“优化”之前测量瓶颈在哪里。

标签: c++ gcc time-complexity


【解决方案1】:

GCC 使用Musser’s introsort 的变体。这保证了 O(n log n) 的最坏情况运行时间:

它从快速排序开始,当递归深度超过基于……被排序元素数量的级别时,切换到堆排序。

实现可以在__introsort_loop函数的stl_algo.h header中找到。

【讨论】:

  • 谢谢。我也可以知道它使用的是哪个版本的 gcc 吗?
  • @Miro 据我所知,每个 版本的 GCC 都使用 introsort,因为 GCC STL 实现基于 SGI 的原始、准标准实现,它已经用过内推。据我所知,此代码的第一个版本是 Musser 自己编写的。
  • std::__introsort_loop(__first, __last, std::__lg(__last - __first) * 2); std::__final_insertion_sort(__first, __last);
猜你喜欢
  • 2011-11-14
  • 2010-09-17
  • 1970-01-01
  • 2010-10-25
  • 2011-11-02
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多