我知道排序算法可以是稳定的,也可以是不稳定的。我知道这两者的区别。通过将switching过程替换为insert,用linked list将不稳定的算法转换为稳定的算法。但是我想知道是否存在稳定排序算法的共同原因?也许有人能分享一些信息或者解释一下?
发布于 2013-12-27 23:04:46
通常,如果算法在没有检查中间元素的情况下交换两个元素,则不稳定。这主要适用于就地算法,但是对于非就地算法,您可以检查是否有任何元素被插入到输出中,这样一个相同的元素可能位于错误的一侧。
想想快速排序吧。在一开始,您可以交换最左边和最右边的元素(没有做很多其他的事情),所以它不稳定。
想想插入排序吧。如果不先检查两个元素之间的所有元素,就不会交换两个元素,所以它是稳定的。
虽然这有点模糊,但是有很多排序算法都是完全不同的,所以它必须是模糊的。
而且,不要把这当作一条规则,它只是一个一般的观察(而且它确实对某些算法不起作用)。你只需要深入了解算法是否稳定,或者检查别人说的是什么。
通过使用链表将
switching过程替换为insert,将不稳定的算法转换为稳定的算法。
我不完全理解这句话,但我几乎可以保证,它并不适用于所有排序算法。
要将任何(基于比较的)不稳定排序算法转换为稳定的排序算法,您可以向比较中添加一个附加参数,这可能只是原始数组中的索引。
https://stackoverflow.com/questions/20806542
复制相似问题