目录
一、稳定性
稳定:冒泡排序、插入排序、归并排序、
不稳定:快速排序、希尔排序、选择排序、堆排序
二、为什么不稳定:
1.快速排序:
选定的哨兵index=0,最后一定会跟中间的某个元素交换,如果中间这个元素正好是3,那么就会发生前后替换。
【3(1) 4 5 3(2) 7 2 3(3) 1 】
-》三路快排
第一轮【3(1) 1 5 3(2) 7 2 3(3) 4 】
第二轮【3(1) 1 3(3) 3(2) 7 2 5 4】
第三轮【3(2) 1 3(3) 3(1) 7 2 5 4】
-》》》》》可见,第三轮3(1)和3(2)发生了交换
因此快速排序也是不稳定的算法
2.希尔排序
由于是不断缩小步长区间,因此在不同步长区间时可能会出现互换。
3.选择排序
[1 , 6(1) , 6(2) , 3]
3往前替换6(1),使得两个6交换了位置
4.堆排序:
5
/ \
15(1) 46
/
15(2)
假设一个最小堆如上,删除5之后15(2)替换到根节点,并且向下shiftDown,发现已经构成最小堆的条件。此时两个15交换了位置,是不稳定的排序。