常用算法稳定性分析
1、稳定性
①冒泡排序
比较是两个相邻的元素比较,交换是两个相邻的元素交换。所以如果两个元素相等,就不用无聊地去交换吧,这样也能减少交换次数。所以冒泡排序是稳定的。
②选择排序
选择排序是每次给第一个位置选第一小的,给第二个位置选第二小的,以此类推.....。所以说两个相等的元素可能因为选择第一个小的就会被打乱顺序。例如5 8 5 2,这四个元素选第一小的2的时候会把5放入放入2的原位置,导致两个5相对顺序变化,所以不稳定。
③插入排序
插入排序是在已经有序的小序列的基础上排序的。排序的规则是:有序小序列后的第一个元素和有序中的最大的比,比他大的直接插入其后,比他小的往前找。相等的话直接插入该元素之后。所以插入排序是稳定的。
④快速排序
快速排序有两个方向,左边的i下标一直往右走,右边的j下标一直往左走。i<=j 交换A[i]和A[j],如果i>j,交换A[j]和枢轴元素,完成一趟快排。不稳定。
⑤归并排序
归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的短序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定 性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结 果序列的前面,这样就保证了稳定性。所以,归并排序也是稳定的排序算法。
⑥基数排序
稳定。
⑦希尔排序
不稳定。有自己的步长。
⑨堆排序
不稳定。
参考:https://www.cnblogs.com/sylz/p/5659553.html