我一直在寻找一段时间,但我找不到visual c ++用于std :: sort函数的算法,我知道GNU标准C ++库使用Introsort,但似乎没有有任何消息说微软的Visual C ++使用哪一个!
答案 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的算法,这是一种快速排序,堆栈和插入排序的混合体。基本思路如下:
introsort的优点是,在常见的情况下,它使用快速排序(非常快),直到插入排序更好,获得两者的优势。在快速排序开始退化的情况下,它使用heapsort,即最坏情况下的O(n log n),但平均速度比quicksort稍慢,以保证O(n log n)最坏情况的运行时间。总的来说,这是一种非常快速的就地排序算法。
希望这有帮助!