【问题标题】:What is the meaning of "stable" and "unstable" for various sorting algorithms? [duplicate]各种排序算法的“稳定”和“不稳定”是什么意思? [复制]
【发布时间】:2017-04-11 00:55:00
【问题描述】:

有人能解释一下关于各种排序算法的“稳定”和“不稳定”是什么意思> 如何确定一种算法是否稳定,以及不稳定的排序算法通常有哪些应用(因为它们是不稳定的)?

【问题讨论】:

标签: algorithm sorting


【解决方案1】:

如果一个排序算法被称为“不稳定”,这意味着对于任何排名相同的项目,绑定成员的顺序不能保证与该集合的连续排序保持相同。对于“稳定”排序,被绑定的条目在排序时将始终以相同的顺序结束。

以应用为例,快速排序算法不稳定。这对于按优先级排序操作(如果两个操作具有相同的优先级,您可能不会关心先执行平局的哪些元素)这样的操作很好。

另一方面,稳定的排序算法适用于在线游戏排行榜之类的事情。如果您要使用不稳定的排序,例如按点排序,那么在网页上查看排序结果的用户可能会在页面刷新时遇到不同的结果,并且分页结果等操作将无法正常运行。

【讨论】:

  • 已编辑以包含一些说明差异为何重要的示例。
  • 不可用的排序通常会产生可预测的结果,即在相同数据的情况下它们不会给出不同的答案。因此,当其他值发生变化时,页面刷新只会显示不同的 equals 顺序。不稳定的原因是在组织数据时使用了树或一些类似的数据结构。
  • 值得注意的是,稳定排序更常见的用法是按多个键排序。例如,如果您有一个代表人的对象数组,并且您希望它按年龄排序,并按名称(字母顺序)打破关系,那么您可以先按名称排序,然后按年龄排序,稳定排序将有它处于您正在寻找的状态。
  • MIB 是稳定排序。 (M-> MergeSort, I-> InsertionSort, B-> BubbleSort)
【解决方案2】:

稳定的排序会保留相同项目的顺序。通过将行索引附加到键,可以使任何排序变得稳定。不稳定的排序,例如堆排序和快速排序,本来就没有这个属性,但是使用它们是因为它们往往比稳定排序更快、更容易编码。据我所知,没有其他理由使用不稳定的排序。

【讨论】:

  • 回到 Azron 所做的上述点(低于你的点)和他所举的例子,这是否意味着我们在 windows 中执行的网格排序是在一种稳定的排序中实现的?网格排序是指按日期和类型对文件夹中的文件进行排序。
  • 在文件管理器和 excel 中完成的排序是稳定的,它们要么使用稳定排序,要么使用不稳定排序之一的稳定版本。
猜你喜欢
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2013-10-20
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多