介绍:
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率有较大提高。
举个例子 :
下面给出严格按照定义来写的希尔排序
源代码:
def shell_sort(lst):
n = len(lst)
gap = n//2
while gap >= 1:
for i in range(gap, n):
num = lst[i] #记录后数的值
j = i
while j - gap >= 0 and lst[j - gap] > num:
# 到这里与插入排序一样了,终止条件 and 后面数> 前数
lst[j] = lst[j - gap] # 后数 = 前数
j -= gap # 同组的上一个数
lst[j] = num # 前数 = 记录的数
gap = gap//2
调用
结果 :
优化思路
因为是基于插入排序的,所以可以使用其插入排序及优化中给出的优化方案。