MergeSort 实现稳定性

MergeSort Implementation Stability

mergesort的实现会影响其稳定性吗?

比如我们用数组来实现归并排序,是不是不如链表实现归并排序稳定?

数组或链表的合并排序的自上而下(递归)和自下而上(迭代)实现的大多数实现都是稳定的。关键因素在合并函数,只要合并函数在"right"个元素之前移动相等的"left"个元素,它就会稳定。比较可以是 "left" element <= "right" element 或者在 C++ 标准库的情况下,它只使用 less than 进行比较,它的比较是 "right" element < "left"元素,所以如果 "left" 元素是 <= "right" 元素,它会被移动。

另一个可能的问题是混合归并排序,它对一小组元素使用了不稳定的排序方法。

一般来说,交换相邻元素的排序(如冒泡排序)通常是稳定的,而交换非相邻元素的排序(如快速排序)通常不稳定。

合并排序应该对它们都稳定。您使用列表还是数组更多地取决于您使用它的目的。

如果排序方法保持数组中具有相同键的元素的相对顺序,则它是稳定的。

自上而下和自下而上的实现都是稳定的方法。它独立于数组或链表。