【发布时间】:2017-04-11 00:55:00
【问题描述】:
有人能解释一下关于各种排序算法的“稳定”和“不稳定”是什么意思> 如何确定一种算法是否稳定,以及不稳定的排序算法通常有哪些应用(因为它们是不稳定的)?
【问题讨论】:
-
也许这在programmers.stackexchange.com上更合适
-
这个视频解释得很好:youtube.com/watch?v=KJuxI1BBLyQ
有人能解释一下关于各种排序算法的“稳定”和“不稳定”是什么意思> 如何确定一种算法是否稳定,以及不稳定的排序算法通常有哪些应用(因为它们是不稳定的)?
【问题讨论】:
如果一个排序算法被称为“不稳定”,这意味着对于任何排名相同的项目,绑定成员的顺序不能保证与该集合的连续排序保持相同。对于“稳定”排序,被绑定的条目在排序时将始终以相同的顺序结束。
以应用为例,快速排序算法不稳定。这对于按优先级排序操作(如果两个操作具有相同的优先级,您可能不会关心先执行平局的哪些元素)这样的操作很好。
另一方面,稳定的排序算法适用于在线游戏排行榜之类的事情。如果您要使用不稳定的排序,例如按点排序,那么在网页上查看排序结果的用户可能会在页面刷新时遇到不同的结果,并且分页结果等操作将无法正常运行。
【讨论】:
稳定的排序会保留相同项目的顺序。通过将行索引附加到键,可以使任何排序变得稳定。不稳定的排序,例如堆排序和快速排序,本来就没有这个属性,但是使用它们是因为它们往往比稳定排序更快、更容易编码。据我所知,没有其他理由使用不稳定的排序。
【讨论】: