我很好奇,为什么稳定性在排序算法中很重要?
如果两个具有相同关键字的对象在出现在要排序的输入数组中的对象以相同的顺序出现在排序的输出中,则认为排序算法是 稳定的 。某些排序算法本质上是稳定的,例如插入排序,合并排序,冒泡排序等。而有些排序算法则不是稳定的,例如堆排序,快速排序等。
背景技术 :“稳定”的排序算法使具有相同排序关键字的项目保持顺序。假设我们有一个包含5个字母的单词的列表:
peach straw apple spork
如果我们仅按每个单词的第一个字母对列表进行排序,则将产生稳定排序:
apple peach straw spork
在一个 不稳定的 排序算法,straw或者spork可以互换,但在稳定的一个,它们留在相同的相对位置(即,由于straw出现之前spork在输入,它也出现之前spork在输出)。
straw
spork
我们可以使用这种算法对单词列表进行排序:按第5列,第4列,第3列,然后2列,然后按1列进行稳定排序。最后,将对其进行正确排序。说服自己。(顺便说一下,该算法称为基数排序)
现在回答您的问题,假设我们有一个名字和姓氏列表。我们被要求按“姓,然后名”排序。我们可以先按名字排序(稳定或不稳定),然后再按姓氏进行稳定排序。经过这些排序后,列表主要按姓氏排序。但是,在姓氏相同的地方,名字将被排序。
您不能以相同的方式堆叠不稳定的排序。