排序算法可以破坏预先存在的元素顺序吗?

时间:2014-01-07 12:34:45

标签: algorithm sorting

我想知道我遇到的一个问题。

我的情况如下:

我有一组数据和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

但是,是否有任何“适当的”排序算法也能做到这一点?

1 个答案:

答案 0 :(得分:3)

您所谈论的是stability

  

在排序某些类型的数据时,在确定排序顺序时仅检查部分数据。例如,在右边的卡片分类示例中,卡片按其等级排序,并且忽略了它们的套装。结果是可以有多个不同的正确排序版本的原始列表。稳定的排序算法根据以下规则选择其中之一:如果两个项目比较相同,如两个5卡,那么它们的相对顺序将被保留,因此如果一个在输入中位于另一个之前,它也将在输出中出现在另一个之前。

许多算法都很稳定,而其他算法则不然。

两个众所周知的例子 - (典型的)quick-sort不稳定,merge-sort稳定。

请参阅Wikipedia以获取一长串排序算法,包括它们是否稳定。