我知道排序算法可以稳定或不稳定。我知道这些之间的区别。我们可以使用switching
将insert
过程替换为linked list
其他单词,从而将不稳定算法更改为稳定。
但我想知道稳定排序算法的常见原因是什么?也许有人可以分享一些信息或解释?
答案 0 :(得分:2)
通常,如果算法交换了两个元素而没有检查中间的元素,则它不稳定。这主要适用于就地算法,但对于非就地算法,您可以检查是否有任何元素插入到输出中,使得相等的元素可能位于错误的一侧。
想想quick-sort。在一开始你可以交换最左边和最右边的元素(没有做太多其他的事情),所以它不稳定。
,如果没有先检查其间的所有元素,你就永远不会交换两个元素。虽然这有点模糊,但是有很多排序算法都是根本不同的,所以它必须有点模糊。
此外,不要将此作为一项规则,它只是一般性观察(对某些算法可能确实不起作用)。你真的只需要深入了解算法,知道它是否稳定,或检查别人说的是什么。
我们可以使用链接列表将
switching
过程替换为insert
其他单词,从而将不稳定算法更改为稳定算法。
我并不完全理解这种说法,但我几乎可以保证它不适用于所有排序算法。
要将任何(基于比较的)不稳定排序算法转换为稳定排序算法,您可以在比较中添加一个额外参数,这可能只是原始数组中的索引。