visual c ++在std :: sort中使用什么排序算法

时间:2014-04-05 18:35:34

标签: algorithm sorting visual-c++ stl

我一直在寻找一段时间,但我找不到visual c ++用于std :: sort函数的算法,我知道GNU标准C ++库使用Introsort,但似乎没有有任何消息说微软的Visual C ++使用哪一个!

2 个答案:

答案 0 :(得分:3)

使用源Luke :)快速排序(MSVC 2013)或某些时候堆排序甚至插入排序(基于容器的大小)

template<class _RanIt,
    class _Diff> inline
    void _Sort(_RanIt _First, _RanIt _Last, _Diff _Ideal)
    {   // order [_First, _Last), using operator<
    _Diff _Count;
    for (; _ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal; )
        {   // divide and conquer by quicksort

答案 1 :(得分:3)

如果我没记错的话,该实现使用了一种名为introsort的算法,这是一种快速排序,堆栈和插入排序的混合体。基本思路如下:

  1. 运行快速排序,停止长度低于预设阈值的任何子范围。
  2. 如果在快速排序期间递归深度超过某个限制,请停止运行快速排序并使用heapsort。
  3. 最后,对整个数组运行插入排序。由于元素都接近其最终位置,因此只需要时间O(n)。
  4. introsort的优点是,在常见的情况下,它使用快速排序(非常快),直到插入排序更好,获得两者的优势。在快速排序开始退化的情况下,它使用heapsort,即最坏情况下的O(n log n),但平均速度比quicksort稍慢,以保证O(n log n)最坏情况的运行时间。总的来说,这是一种非常快速的就地排序算法。

    希望这有帮助!