注:我不小心贴this question没有指定我用的是哪个STL实现,我觉得它真的不能被更新,因为它会使大部分答案过时。微软的STL :: list :: sort()使用哪种排序算法?
所以,正确的问题去 - 这排序算法在下面的代码时,假设我使用微软的Visual C STL库++?:
list<int> mylist;
// ..insert a million values
mylist.sort();
注:我不小心贴this question没有指定我用的是哪个STL实现,我觉得它真的不能被更新,因为它会使大部分答案过时。微软的STL :: list :: sort()使用哪种排序算法?
所以,正确的问题去 - 这排序算法在下面的代码时,假设我使用微软的Visual C STL库++?:
list<int> mylist;
// ..insert a million values
mylist.sort();
只要你不必依靠二手资料,排序的代码是正确的list
头 - 这是大约35线。
看来是修改后的迭代(非递归)合并排序多达25个箱(我不知道是否有这个变种归并排序的具体名称)。与MS VC6来到
据我所知,这是Introsoft: http://en.wikipedia.org/wiki/Introsort
至少在最近的版本(例如VC++ 9.0/VS 2008)MS VC++使用一个合并排序。
嗯。 http://www.cplusplus.com/reference/algorithm/sort/允许一个非稳定的排序 –
@Stephan Eggermont:这是关于'std :: sort()',而不是'std :: list :: sort()'。 'std :: sort()'被允许是不稳定的,但是'std :: list :: sort()'但是'std :: list :: sort()'不是。 –
STL是P·J·普拉热的版本库(Dinkumware的),并且它std::list<>::sort()
使用合并排序。我不知道更高版本的MS软件包。
'list.sort()'不能使用内省排序实现 - 内省排序是不稳定的,而'list.sort()是必需的'是稳定的。 –
说谁? http://www.cplusplus.com/reference/algorithm/sort/ –
@Stephan Eggermont:说C++标准的第23.2.2.4/31节。您正在查看的文档是针对std :: sort,而不是std :: list :: sort。 –