为什么selectsorting不稳定?

这可能是微不足道的,但我不明白为什么selectsorting的默认实现不稳定?

在每次迭代中,您会在剩余数组中find最小元素。 当find这个最小值时,可以select你find的第一个最小值,只有当元素小于它时才更新。 所以,在每次迭代中select的元素是第一个最小值 – 这意味着,它是以前的sorting顺序。 所以,就我的理解而言,当前的sorting不会破坏以前sorting的等于元素的顺序。

我错过了什么?

一个小例子:

让b = B in

<b>,<b>,<a>,<C>(带有<b <c)

在一个循环之后,序列被sorting,但是B和b的顺序已经改变:

<a>,<b>,<B>,<c>

但是,你可以实现selectsorting稳定,如果你,而不是切换,插入最小值。 但为了提高效率,您应该有一个支持以低成本插入的数据结构,否则最终会导致二次复杂性。

问题是selectsorting将数组前面的元素交换到由最小元素腾出的位置,这可能会扰乱sorting的顺序。 例如,假设我正在sorting

(4, 0), (4, 1), (1, 0) 

selectsorting首先将(1,0)交换到前面:

 (1, 0), (4, 1), (4, 0) 

而现在(4,0)和(4,1)与他们开始sorting的地方没有关系。 运行这个完成会按照这个顺序离开这个元素,而这个4是不合法的。

希望这可以帮助!

如果元素已经sorting,稳定的方法不会进一步计算,但是直到计算结束,因此它是不稳定的。