0x01 描述
希尔排序的主要思路是:
- 先取一个正整数 d1(d1 < n),把全部记录分成 d1 个组,所有距离为 d1 的倍数的记录看成一组,然后在各组内进行插入排序;
- 然后取 d2(d2 < d1),重复上述分组和排序操作;
- 直到取 di = 1(i >= 1) 位置,即所有记录成为一个组,最后对这个组进行插入排序。一般选 d1 约为 n/2,d2 为 d1 /2, d3 为 d2/2 ,…, di = 1。
0x02 python代码
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
import random
def shellSort(L):
count = len(L)
gap = count // 2
while gap > 0:
for i in range(0, gap):
k = i + gap
while k < count:
for j in range(i + gap, count, gap):
if L[j] < L[j - gap]:
L[j], L[j - gap] = L[j - gap], L[j]
k += gap
gap //= 2
return L
if __name__ == '__main__':
num_list = [random.randint(0, 100) for i in range(100)]
num_list = shellSort(num_list)
print(num_list)