【问题标题】:Is the `std::sort` function unstable?`std::sort` 函数是否不稳定?
【发布时间】:2020-12-08 15:13:01
【问题描述】:

只是想确认我的想法是对还是错。 根据定义:

如果两个对象具有 相同或相同的键在排序中以相同的顺序出现 输出,因为它们出现在要排序的输入数组中。

现在在标准库的std::sort 中,当两个元素相等时返回false 是必须的。因此,可以说所使用的排序算法是不稳定的吗?

【问题讨论】:

标签: c++ sorting c++17 c++-standard-library


【解决方案1】:

现在在 STL 的排序函数中,当两个元素相等时返回 false 是必须的。因此,可以说所使用的排序算法是不稳定的吗?

不,这完全不相关。

事实上,std::sort 并不能保证是稳定的;如果您需要稳定的排序,请使用std::stable_sort

但字符串弱排序要求是不相关的,std::sortstd::stable_sort 都是一样的。

【讨论】:

    【解决方案2】:

    当两个元素相等时返回 false 是必须的。

    这并没有区分稳定和不稳定的排序算法。

    两种主要的标准排序算法是std::sortstd::stable_sort。第一个不保证是稳定的,后者是。两者都需要< 或用作谓词的比较器来实现strict weak ordering(这意味着对于任何aa < afalse)。

    【讨论】:

      【解决方案3】:

      std::sort() 不能保证是稳定的,实际上它永远不会被实现为稳定的,因为稳定排序比较慢。如果需要稳定排序,请使用std::stable_sort()

      【讨论】:

        【解决方案4】:

        检查http://www.cplusplus.com/reference/algorithm/sort/ 的 C++ 参考,这清楚地表明它不稳定

        【讨论】:

        • 不稳定,但不是 OP 认为的原因。
        • 假设 OP 在询问之前确实查阅了文档,那么这个答案对他们没有帮助。如果您认为他们没有,那么这应该是一条评论
        猜你喜欢
        • 2010-10-11
        • 2018-03-22
        • 2012-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        • 2012-04-09
        • 2020-10-02
        相关资源
        最近更新 更多