插入排序——基本插入排序与希尔排序

插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

基本插入排序

思路

①先将第一个元素看作是有序区间,第二个元素开始后的元素看作未排序列;

②从第二个元素开始直至最后,先让待排数据与前面的有序区间的最后一个数据进行比较, 直到其插入到有序区间的合适位置(即,插入后有序区间保持有序) ;       


代码如下


时间复杂度

我们以将序列排为升序为前提

先看最好的情况,序列已经是升序的,在这种情况下,需要进行的比较操作为n-1次;

最坏的情况,序列为降序序列,那此时需要进行的比较次数为n(n-1)/2次。

因此,平均来说,插入排序算法时间复杂度为O(n^2),因而,插入排序不适合数据量比较大的排序应用。

希尔排序

    希尔排序(Shell Sort)又称为“缩小增量排序”。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。



希尔排序相较于直接插入而言(以升序为例),它是为了让某些较大的数能够快速的移动到后面,减少较大的数与其他数的比较次数,向上面图中所示,如果是直接排序,9会依次和8、7、6·····1这八个数比较,但如果是希尔排序,9就不会和8、7等比较,他会很快的被移动到后面。

代码如下:


比较:

猜你喜欢

转载自blog.csdn.net/l__xing/article/details/80317935
今日推荐