提问者:小点点

`std::sort`函数是否不稳定?


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

如果具有相等或相同键的两个对象在排序输出中出现的顺序与它们在要排序的输入数组中出现的顺序相同,则排序算法被称为稳定的。

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


共3个答案

匿名用户

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

不,那完全不相关。

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

但是字符串弱排序要求是不相关的,对于std::sortstd::stable_sort是相同的。

匿名用户

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

这并没有造成稳定和非稳定排序算法之间的区别。

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

匿名用户

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