【问题标题】:Which sorting algorithm is used by Microsoft's STL::list::sort()?Microsoft 的 STL::list::sort() 使用哪种排序算法?
【发布时间】:2009-11-11 20:39:09
【问题描述】:

注意:我不小心发布了this question,但没有说明我使用的是哪个 STL 实现,而且我觉得它无法真正更新,因为它会使大部分答案过时。

那么,正确的问题是——假设我使用的是 Microsoft Visual C++ 的 STL 库,下面的代码中使用了哪种排序算法?:

list<int> mylist;

// ..insert a million values

mylist.sort();

【问题讨论】:

    标签: algorithm visual-c++ sorting stl


    【解决方案1】:

    只是为了让您不必依赖二手信息,排序代码就在 list 标头中 - 大约 35 行。

    似乎是一种修改过的迭代(非递归)合并排序,最多有 25 个 bin(我不知道这种合并排序的变体是否有特定的名称)。

    【讨论】:

      【解决方案2】:

      至少在最近的版本中(例如 VC++ 9.0/VS 2008)MS VC++ 使用合并排序。

      【讨论】:

      • @Stephan Eggermont:那是关于std::sort(),而不是std::list::sort()std::sort() 允许不稳定,但std::list::sort()std::list::sort() 不允许。
      【解决方案3】:

      MS VC6 附带的 STL 是 P. J. Plauger 的库版本 (Dinkumware),它在 std::list&lt;&gt;::sort() 中使用了合并排序。我不知道MS的包的更高版本。

      【讨论】:

        【解决方案4】:

        据我所知是 Introsoft:http://en.wikipedia.org/wiki/Introsort

        【讨论】:

        • list.sort() 不能使用 introsort 实现 -- introsort 不稳定,而 list.sort() 需要稳定。
        • @Stephan Eggermont:说 C++ 标准的第 23.2.2.4/31 节。您正在查看的文档适用于 std::sort,而不是 std::list::sort。
        猜你喜欢
        • 2010-12-15
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        相关资源
        最近更新 更多