我想知道我遇到的一个问题。
我的情况如下:
我有一组数据和2个比较器。 您可以假设第一个比较器按字母顺序对项目进行排序,另一个比较器根据其他一些条件(f.e.自定义级别值)对项目进行排序。
所以给出以下数据:
1: b / lvl 1
2: c / lvl 1
3: a / lvl 1
4: d / lvl 2
首次排序后,它应如下所示:
a, b, c, d
在第二个之后:
d, a, b, c
到目前为止一切顺利。 我知道有可能破坏第一次排序(例如,使用Bogosort)。 所以这可能是第二种类型的输出:
d, b, c, a
但是,是否有任何“适当的”排序算法也能做到这一点?
答案 0 :(得分:3)
您所谈论的是stability:
在排序某些类型的数据时,在确定排序顺序时仅检查部分数据。例如,在右边的卡片分类示例中,卡片按其等级排序,并且忽略了它们的套装。结果是可以有多个不同的正确排序版本的原始列表。稳定的排序算法根据以下规则选择其中之一:如果两个项目比较相同,如两个5卡,那么它们的相对顺序将被保留,因此如果一个在输入中位于另一个之前,它也将在输出中出现在另一个之前。
许多算法都很稳定,而其他算法则不然。
两个众所周知的例子 - (典型的)quick-sort不稳定,merge-sort稳定。
请参阅Wikipedia以获取一长串排序算法,包括它们是否稳定。