排序算法的稳定性
稳定算法
- 归并排序:归并排序只在合并子数组时发生元素位置的交换,这个过程完全可以控制相等元素的相对位置;
- 插入排序:
- 冒泡排序:
- 桶排序:
不稳定排序
- 快速排序:将支点与最终落点交换时可能会造成相等元素的换位;
- 选择排序:排序的过程是共进行n次扫描,第i次扫描会从未排序的部分选出最小的元素,将该元素与第i个元素交换位置;不稳定的一个例子是:序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
- 堆排序:比如:3 27 36 27,如果堆顶3先输出,则第三层的27(最后一个27)跑到堆顶,然后堆稳定,继续输出堆顶,是刚才那个27,这样说明后面的27先于第二个位置的27输出,因此不稳定;
- 希尔排序:是对插入排序的优化,因为插入排序在数组有序的情况下效率很好,具体见https://blog.csdn.net,不稳定的例子:见图片。