排序算法“稳定”是什么意思?


43

在阅读有关各种排序算法的文章时,我已经看到它提到有些是“稳定的”,有些不是。这是什么意思,选择算法时要在此基础上进行哪些权衡?


32
使用维基百科,您可以在一分钟之内轻松回答这个问题。en.wikipedia.org/wiki/Sorting_algorithm
无限母马2014年


4
这是一个缺乏自己研究的问题。回答了维基百科图片。它得到了很好的反馈,这使我感到难过。恕我直言,它应该关闭,并且不要被投票。
无限母马(Mare Infinitus)

4
另一方面,我刚刚看到了这一点并学到了一些新东西。如果我知道自己不知道,那么我可以进行研究,但是因为OP提出了问题,所以我现在知道了我所不知道的东西。
卡扎尔克2014年

4
通常,在StackExchange网站上,“仅在Google上进行搜索”或“在Wikipedia上进行搜索”是不可接受的。因为他们没有通过致电google和Wikipedia主管部门来提供对投诉者正在验证的有效问题的答案。如果问题很容易是程序员或stackexchange中另一个问题的重复,那么您可以提出投诉。
Michael Paulukonis 2014年

Answers:


88

稳定排序是一种保留输入集原始顺序的排序,其中比较算法不能区分两个或多个项目。

考虑一种排序算法,该算法按等级对卡片进行排序,但不对西装进行排序。稳定的排序将确保保留具有相同等级的卡片的原始顺序;不稳定的排序不会。

在此处输入图片说明


38
更正:当两个元素相等时,不稳定算法会表现出不确定的行为,这很有可能有时会保留顺序。
aaaaaaaaaaaaaa 2014年

9
精美图片,非常类似于Wikipedia en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus 2014年

9
@MareInfinitus:在公共领域。检查原始图片的归属。
罗伯特·哈维

2
一个好的图片比一般情况下的很多单词更快更深刻地解释。我不想谈论法律问题。
无限母马2014年

3
@RobertHarvey实际上,我相信编辑器是正确的。您当前的帖子说,稳定的排序可以保留同一套衣服中的卡片顺序,但是同一套衣服中的卡片将具有不同的等级,因此必须重新排列以实现排序顺序。例如,排序不保留2个心和5个心的顺序。相同等级(和不同花色)的牌的顺序决定了稳定和不稳定。
David Z

26

稳定的算法保留了元素的相对顺序。

因此,稳定的排序算法将保留比较相等的值的相对顺序。

考虑一种排序算法,其中我们根据二维点的X维对它们进行排序。

要排序的集合: {(6, 3), (5, 5), (6, 1), (1, 3)}

稳定排序: {(1, 3), (5, 5), (6, 3), (6, 1)}

常规排序:{(1, 3), (5, 5), (6, 3), (6, 1)}{(1, 3), (5, 5), (6, 1), (6, 3)}


至于权衡……好吧,稳定的排序效率较低,但有时您需要它。

例如,当用户单击列标题以对UI中的值进行排序时,可以合理地期望在值相等的情况下使用其先前的排序顺序。


2
它的效率较低吗?看起来“显而易见”,但是某些最佳的排序算法本质上是稳定的(例如,基于合并排序的任何事物,例如Tim排序),它们不需要做任何明确的额外工作即可保持稳定。

9
稳定与总体性能无关。Mergesort在O(n * log n)中运行并且稳定。Heapsort具有类似的性能,但不稳定。
无限母马

2
“稳定”还可以应用于数据结构,例如。“稳定堆”是一种堆,该堆以相同的优先级将排队的项从队列中取出。这对于有效的路径查找算法非常重要。
BlueRaja-Danny Pflughoeft 2014年

1
没有稳定的排序,它们是O(n ln n)比较,并且在内存中也没有O(1)。速度不是效率的唯一衡量标准。您不能就地稳定排序这一事实很重要。
QuestionC

3
@QuestionC似乎块排序是稳定的并且适合那些范围。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.