# python实现希尔排序(插入排序的一种)
# 先宏观进行调整,在进行微观调整
def shellSort(lst, k, reverse=False):
length = len(lst)
dk = k # 设置一个增量dk
while dk > 0:
for i in range(dk, length):
temp = lst[i]
j = i
while j >= dk and lst[j - dk] > temp:
lst[j] = lst[j - dk]
j -= dk
lst[j] = temp
dk = int(dk / 2)
if reverse == False:
return lst
else:
lst.reverse()
return lst
# 测试数据
test1 = [19, 21, 4, 6, 25, 3, 99, 67, 12]
test2 = [19, 21, 4, 6, 25, 3, 99, 67, 12]
data1 = shellSort(test1, 7)
data2 = shellSort(test2, 2, True)
print("从小到大:", data1)
print("从大到小:", data2)
希尔排序基本思想: 先进行宏观调整,后微观调整。
【 10 9 8 7 6 5 4 3 2 1 】
1.增量为 5 时: 分别进行插入排序的结果:
①【10 5 】 【 5 10】
②【 9 4 】 【 4 9 】
③【 8 3 】 【 3 8 】
④【 7 2 】 【 2 7 】
⑤【 6 1 】 【 1 6 】
此时data [ ] 为:【 5 4 3 2 1 10 9 8 7 6 】
2.增量为 4 时: 分别进行插入排序的结果:
①【 5 1 7 】 【 1 5 7 】
②【 4 10 6 】 【 4 6 10 】
③【 3 9 】 【 3 9 】
④【 2 8 】 【 2 8 】
此时data [ ] 为:【 1 4 3 2 5 6 9 8 7 10 】
以此递推到增量为 1 。
敬请赐教!