文章目录
算法稳定性
很多文章是这样描述算法稳定性的:
“对于待排序的序列中有两个元素相等,若排序后他们的先后顺序不变,则称这个排序算法是稳定的,否则称这个算法是不稳定的。”
个人理解这个说法是有偏差的,对很多人理解算法稳定性指示了错误的方向。准确地说,
“算法的稳定性应该是指这个算法在完成后我们是否能够预计到算法的结果。”
比如说在冒泡算法中,设置条件为小于等于的时候继续冒泡,这时候是会破坏序列中原有的顺序的,若是序列中的两个元素相等也是会交换其位置的。但是我觉得这并不能说这个算法就是不稳定的,因为你是可以预算到这个算法的结果,是一定会交换两个相等元素的位置的。
但是对于希尔排序,在排序的过程中,你是不能够判断是否一定会交换两个相等元素的位置。
所以算法称为稳定的应该是指你是能够预估到这个算法的结果,相反这个算法的结果是不可测的。