如果排序算法使用等于键保留任意两个元素的相对顺序,则排序算法是稳定的。在哪些条件下快速稳定?
Quicksort在没有项目传递时是稳定的,除非它有一个较小的键。
还有哪些其他条件使其稳定?
答案 0 :(得分:11)
嗯,使用O(N)空间而不是就地不稳定实现使用的O(log N)来制作稳定的快速排序非常容易。当然,使用O(N)空间的快速排序不一定要稳定,但可以这样做。
我已经读过可以制作一个使用O(log N)内存的就地快速排序,但它最终会慢得多(并且实现的细节有点野蛮)。
当然,您可以随时查看正在排序的数组,并添加一个额外的键,它是原始数组中的位置。然后快速排序将是稳定的,你只需要在最后删除额外的密钥。
答案 1 :(得分:0)
您可以将这些添加到列表中,如果这是您的方法:
答案 2 :(得分:0)
条件很容易弄清楚,只需将原始顺序保持相等即可。没有其他条件与此条件有本质区别。关键是如何实现。
有一个很好的例子。
1。使用中间元素作为枢轴。
2。创建两个列表,一个列表较小,另一个列表较大。
3。从第一个迭代到最后一个,然后将元素放入两个列表中。将小于或等于和大于透视点的元素追加到较小的列表中,将大于或等于和小于透视点的元素追加到以下列表中较大的列表。继续递归较小的列表和较大的列表。
https://www.geeksforgeeks.org/stable-quicksort/
后两点都是必要的。中间元素作为枢轴是可选的。如果选择最后一个元素作为枢轴,只需从一开始就将所有相等的元素逐个追加到较小的列表中,它们将保持原始顺序不变。