Quicksort - 使其稳定的条件

问题描述 投票:5回答:3

如果排序算法使用等于键保留任何两个元素的相对顺序,则排序算法是稳定的。在哪些条件下快速稳定?

没有项目通过时,Quicksort是稳定的,除非它有一个较小的键。

还有什么条件让它稳定?

sorting quicksort
3个回答
12
投票

好吧,使用O(N)空间而不是就地,不稳定实现使用的O(log N)来制作稳定的快速排序是非常容易的。当然,使用O(N)空间的快速排序不一定是稳定的,但可以这样做。

我已经读过可以制作一个使用O(log N)内存的就地快速排序,但它最终会慢得多(并且实现的细节有点野蛮)。

当然,您可以随时查看正在排序的数组,并添加一个额外的键,它是原始数组中的位置。然后快速排序将是稳定的,您只需通过并在最后删除额外的密钥。


0
投票

您可以将这些添加到列表中,如果这是您的方法:

  • 当元素具有绝对排序时
  • 当实现需要O(N)时间来记录相对顺序并在排序后恢复它们
  • 当所选择的枢轴被确保为唯一键时,或者当前子列表中的第一个出现时。

0
投票

条件很容易弄清楚,只需保持相等元素的原始顺序。没有其他条件与此有本质区别。关键是如何实现它。

有一个很好的例子。

1.使用中间元素作为枢轴。

2.创建两个列表,一个用于较小,另一个用于较大。

3.从第一个到最后一个迭代,并将元素放入两个列表中。将小于或等于并且位于枢轴之前的元素附加到较小的列表,该元素大于或等于枢轴的位置和后面的较大列表。继续递归较小的列表和较大的列表。

https://www.geeksforgeeks.org/stable-quicksort/

后两点都是必要的。作为枢轴的中间元素是可选的。如果您选择最后一个元素作为数据透视表,只需从开头逐个将所有相等元素添加到较小的列表中,它们将保留原始顺序。

© www.soinside.com 2019 - 2024. All rights reserved.