mergesort的实现会影响其稳定性吗?
例如,如果我们使用数组来实现合并排序,那么它是否比合并排序的链表实现更不稳定?
答案 0 :(得分:2)
对于数组或链表的合并排序,自顶向下(递归)和自下而上(迭代)实现的大多数实现都是稳定的。关键因素是在合并函数中,只要合并函数在“右”元素之前移动相等的“左”元素,它就会是稳定的。比较可以是“左”元素< =“right”元素,或者在C ++标准库的情况下,其仅使用少于比较,其比较是“正确”元素< “left”元素,如果它是< =“right”元素,那么“left”元素将被移动。
另一个可能的问题是混合合并排序对小组元素使用非稳定排序方法。
通常,交换相邻元素的排序(如冒泡排序)通常是稳定的,而交换非相邻元素的排序(如快速排序)通常不稳定。
答案 1 :(得分:0)
合并排序应该是稳定的。您使用列表或数组更多地取决于您使用它的目的。
答案 2 :(得分:0)
如果排序方法保留了数组中具有相同键的元素的相对顺序,则它是稳定的。
自上而下和自下而上的实施都是稳定的方法。它独立于数组或链接列表。