希尔排序
希尔排序时一种分组插入排序算法。
首先取一个整数d1=n/2,将元素分为d1个组,每组相邻元素之间距离为d,在各组内进行直接插入排序;
取第二个整数d2=d1/2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序。
希尔排序每趟并不使某些元素有序,而是使整体数据越来越接近有序,最后一趟排序使得所有数据有序。
例:取整数d = 9//2 = 4

将元素分为4组

组内进行直接插入排序

归位

取d = 4/2 = 2,分为两组,进行组内排序

d=2归位后,再取d=2/2=1,直接插入排序即可完成排序。

希尔排序代码:
# 希尔排序
# 将插入排序的代码中的 1 替换为gap
def insert_sort_gap(li, gap): # gap:每组相邻元素之间的距离,d
for i in range(gap, len(li)): # 摸到牌的下标
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
li = list(range(10))
import random
random.shuffle(li)
print(li)
shell_sort(li)
print(li)
希尔排序是一种分组插入排序算法,通过逐步缩小元素间的间隔进行排序。文章介绍了希尔排序的工作原理,包括分组、直接插入排序和逐步缩小间隔的过程,并提供了一个Python代码示例。

710

被折叠的 条评论
为什么被折叠?



