排序算法之希尔排序

原理:

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

5 3 6 4 1 8

gap = 长度//2 = 3 分别以不同颜色表示分组

第一遍:

缩减gap 3//2 = 1

此时只有一组,直接进行插入排序即可.(事实上当gap等于2时,数据被分成2组,而不会2个一组两个一组),希尔排序实则是对插入排序的优化.

 代码实现:

        核心代码:

        while i >= gap:
            if alist[i] < alist[i-gap]:
                alist[i],alist[i-gap] = alist[i-gap],alist[i]
                i -= gap
            else:
                break 

完整代码实现:

def sort(alist):
    gap = len(alist)//2

    while gap >= 1:
        #将下属所有的1换成gap
        for i in range(gap,len(alist)):
            while i >= gap:
                if alist[i] < alist[i-gap]:
                    alist[i],alist[i-gap] = alist[i-gap],alist[i]
                    i -= gap
                else:
                    break
        gap //= 2 #缩减增量
    return alist 

 

上一篇:排序算法之插入排序

下一篇:排序算法之快速排序