# 希尔排序,是插入排序的改进,是将序列分为不同组,逐渐排序、合并、排序完成的
# 基本原理(升序):
# 1.选定增量(组数)
# 2.将序列按照增量间隔,划分为指定组数
# 3.对每一组内部进行直接插入排序
# 4.减少增量,重复2、3,直至增量为1
# 实现过程:确定增量,分组,确定每组元素,将每组元素插入排序
import random
Range = 100
Length = 11
if __name__ == '__main__':
list = random.sample(range(Range),Length)
print('before sort:',list)
gap = Length//2
while gap > 0: #确定增量
for i in range(gap): #确定组别
for j in range(i,Length,gap): #确定组中元素
for k in range(1,Length//gap): #实现插入排序
for m in range(k,0,-1):
if list[m] < list[m-1]:
list[m],list[m-1] = list[m-1],list[m]
gap //=2
print('after sort:', list)
通用精炼版
import random
Range = 100
Length = 11
list = random.sample(range(Range), Length) #在指定序列中随机获取指定长度片段
print('before sort:', list)
gap = Length // 2
while gap > 0:
for j in range(gap, Length): #实现对每组的首元素之后的元素的插入
i = j
while (i - gap) >= 0: #对每组元素的有序部分实现插入排序
if list[i] < list[i - gap]:
list[i], list[i - gap] = list[i - gap], list[i]
i -= gap
else:
break
gap //= 2
print('after sort:', list)