一尘不染

排序算法的稳定性是什么,为什么如此重要?

algorithm

我很好奇,为什么稳定性在排序算法中很重要?


阅读 651

收藏
2020-07-28

共1个答案

一尘不染

如果两个具有相同关键字的对象在出现在要排序的输入数组中的对象以相同的顺序出现在排序的输出中,则认为排序算法是 稳定的
。某些排序算法本质上是稳定的,例如插入排序,合并排序,冒泡排序等。而有些排序算法则不是稳定的,例如堆排序,快速排序等。

背景技术 :“稳定”的排序算法使具有相同排序关键字的项目保持顺序。假设我们有一个包含5个字母的单词的列表:

peach
straw
apple
spork

如果我们仅按每个单词的第一个字母对列表进行排序,则将产生稳定排序:

apple
peach
straw
spork

在一个 不稳定的
排序算法,straw或者spork可以互换,但在稳定的一个,它们留在相同的相对位置(即,由于straw出现之前spork在输入,它也出现之前spork在输出)。

我们可以使用这种算法对单词列表进行排序:按第5列,第4列,第3列,然后2列,然后按1列进行稳定排序。最后,将对其进行正确排序。说服自己。(顺便说一下,该算法称为基数排序)

现在回答您的问题,假设我们有一个名字和姓氏列表。我们被要求按“姓,然后名”排序。我们可以先按名字排序(稳定或不稳定),然后再按姓氏进行稳定排序。经过这些排序后,列表主要按姓氏排序。但是,在姓氏相同的地方,名字将被排序。

您不能以相同的方式堆叠不稳定的排序。

2020-07-28