概述
之前把8种排序算法复习了一遍,来进行一个总结。内容如下图:
时间复杂度
直接插入排序:平均情况是O(n2),最好情况是O(n),当数组是正序时,只需要与最后一个关键码进行比较,不需要移动,最坏情况是倒叙,要比较n-1次还要移动,为O(n2);
希尔排序:平均情况是O(n1.3),我也不知道这是怎么算出来的,在网上找了一下证明,数学公式推倒,就没深入了,有时间再研究一下。最好情况是O(nlogn),最坏情况是 O(n2)。
冒泡排序:一共要比较n-1趟,这是外层循环的数量。内层还要继续进行比较n-i-1次。因此平均时间复杂度是O(n2),最好的情况是直接有序,就不用移动元素了,是O(n); 最坏的情况也就是O(n2);
快速排序:最好情况:O(nlogn),平均情况是O(nlogn),最坏的情况是待排序的序列正序或者逆序,时间复杂度是O(n2)。快速排序应该是比较优秀的排序算法,适合大量的无序的序列的排序。
简单选择排序:最好情况O(n2),最坏情况O(n2),平均情况O(n2)。
稳定性
稳定性是指在未排序数组中,有两个相等的数,他们的前后位置在排序后也是不变的。例如数组A中A3=6,A7=6,A3在A7前面,排序后A3依然在A7前面。
直接插入排序:稳定。因为每次从未排序的数组中取第一个数时的顺序是确定的,比较的时候也是从有序数组的最后一个元素进行比较,那么插入的时候也一定是相对的前后 位置一定。
希尔排序:不稳定。希尔排序是对直接插入的改造,他就是为了让数组大概有序,所以在前面的交换中,两个数的相对位置可能会改变。
冒泡排序:稳定。冒泡排序也是两个序列,前面是无序序列,后面是有序的序列,每次都是从第一个元素开始,进行判断,所以两个相等元素的相对位置不会发生变化,是稳定的。
快速排序:不稳定。在和中枢元素交换的时候,有可能会打乱相对顺序。
简单选择排序:不稳定排序,因为每次从无序序列的前面去取第一个数,假如这个数后面还有一个相等的数,那么这两个数的位置会交换。
适用情况
直接插入排序:数组基本有序时,非常适合
希尔排序:数组较小时,数组基本有序时。
冒泡排序:数组基本有序
快速排序:适合大量的无序的序列的排序。
简单选择排序:待排序记录较少