【发布时间】:2017-04-21 21:15:08
【问题描述】:
mergesort 的实现会影响它的稳定性吗?
例如,如果我们使用数组来实现归并排序,那是不是比归并排序的链表实现更不稳定?
【问题讨论】:
-
排序算法是稳定的还是不稳定的。没有所谓的“不稳定”。
标签: arrays algorithm linked-list quicksort mergesort
mergesort 的实现会影响它的稳定性吗?
例如,如果我们使用数组来实现归并排序,那是不是比归并排序的链表实现更不稳定?
【问题讨论】:
标签: arrays algorithm linked-list quicksort mergesort
数组或链表的合并排序的自顶向下(递归)和自底向上(迭代)实现的大多数实现都将是稳定的。关键因素在合并函数中,只要合并函数将相等的“左”元素移动到“右”元素之前,它将是稳定的。比较可以是“左”元素
另一个可能的问题是混合合并排序,它对小元素组使用不稳定的排序方法。
一般来说,交换相邻元素的排序(如冒泡排序)通常是稳定的,而交换非相邻元素的排序(如快速排序)通常不稳定。
【讨论】:
合并排序应该对它们都稳定。您使用列表还是数组更多地取决于您使用它的目的。
【讨论】:
如果排序方法保持数组中具有相同键的元素的相对顺序,则它是稳定的。
自上而下和自下而上的实施都是稳定的方法。它独立于数组或链表。
【讨论】: