我知道selection sort可以实现为稳定或不稳定。但是我不知道怎么回事。我认为排序算法只能是稳定的或不稳定的。有人可以解释吗?
selection sort
基本上selection sort,在每个“回合”结束时发生的交换可以更改具有相同值的项目的相对顺序。
例如,假设您整理4 2 3 4 1与selection sort。
4 2 3 4 1
第一个“回合”将遍历每个元素以寻找最小元素。它会发现1是最小元素。然后它将1交换到第一个位置。这将导致第一个位置的4进入最后一个位置:1 2 3 4 4
1 2 3 4 4
现在4的相对顺序已更改。原始列表中的“第一个” 4已移至其他4个之后的位置。
记住稳定的定义是
保持相同值的元素的相对顺序。
好吧,selection sort可以通过 在一组值中找到“最小”值,然后将其与第一个值交换来工作 :
码: 2,3,1,1#扫描0到n并找到’最小’值 1,3,2,1#用元素0交换’最小’。 1,3,2,1#扫描1到n并找到’最小’值 1,1,2,3#将’least’与元素1交换。 …等等,直到将其排序。
码:
2,3,1,1#扫描0到n并找到’最小’值
1,3,2,1#用元素0交换’最小’。
1,3,2,1#扫描1到n并找到’最小’值
1,1,2,3#将’least’与元素1交换。
…等等,直到将其排序。
为了使其稳定,而不是交换值,而是插入“最小”值 :
码: 2,3,1,1#扫描0到n并找到’最小’值 1,2,3,1#在位置0插入’least’,将其他元素推回去。 1,3,2,1#扫描1到n并找到’最小’值 1,1,2,3#在位置1插入“最小”,将其他元素推回去。 …等等,直到将其排序。
1,2,3,1#在位置0插入’least’,将其他元素推回去。
1,1,2,3#在位置1插入“最小”,将其他元素推回去。
修改不稳定的选择排序算法使其变得稳定应该不难。