希尔排序
希尔排序的基本思想是:
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。
希尔排序每次排序能使序列整体趋于有序,最后一次插入排序使序列有序。
算法过程:
1.取整数d1 = n//2,依据d对数列进行分组,组内每个元素距离为d;
2.各组内进行插入排序;
3.取整数d2 = d1//2,进行分组并插入排序,
4.直到d=1,进行最后一次插入排序。
def insert_sort_gap(li, gap): for i in range(gap, len(li)): #i 表示摸到的牌的下标 tmp = li[i] j = i - gap #j指的是手里的牌的下标 while j >= 0 and li[j] > tmp: li[j+gap] = li[j] j -= gap li[j+gap] = tmp def shell_sort(li): d = len(li) // 2 while d >= 1: insert_sort_gap(li, d) d //= 2