据说排序算法是 稳定 如果具有相等键的两个对象在排序输出中出现的顺序与它们在要排序的输入数组中出现的顺序相同。一些排序算法本质上是稳定的,如插入排序,合并排序,冒泡排序等。并且一些排序算法不是,如堆排序,快速排序等。
背景:“稳定”排序算法按顺序保存具有相同排序键的项目。假设我们有一个5个字母的单词列表:
peach
straw
apple
spork
如果我们只按每个单词的第一个字母对列表进行排序,那么稳定排序会产生:
apple
peach
straw
spork
在一个 不稳定 排序算法, straw 要么 spork 可以互换,但在稳定的情况下,它们保持相同的相对位置(也就是说,因为 straw 出现在之前 spork 在输入中,它也出现在之前 spork 在输出中)。
我们可以使用这个算法对单词列表进行排序:按列5进行稳定排序,然后是4,然后是3,然后是2,然后是1。 最后,它将被正确排序。说服自己。 (顺便说一句,该算法称为基数排序)
现在回答你的问题,假设我们有一个名字和姓氏的列表。我们被要求“按姓氏排序,然后先排序”。我们可以先按名字排序(稳定或不稳定),然后按姓氏进行稳定排序。在这些排序之后,列表主要按姓氏排序。但是,如果姓氏相同,则对名字进行排序。您不能以相同的方式堆叠不稳定的排序。
在实际商业案例中:
如果广告展示,如果双方广告主都出价一样,都是100, 但是对应的展示的广告是应该不一样的(针对客户的要求展示特定的广告),但是如果不稳定,则无法展示对应需要的看到的广告,虽然他们消耗的价格是一样的。