希尔排序python实现
希尔排序是直接插入排序的加强版,也称为减小增量排序。以从小到大排序为例进行简要分析。
算法思想
希尔排序的排序思想在先将原序列划分成若干个子序列,其中划分的依据为按照间隔gap的大小分开。至于gap的选法可以不一样,我们以gap初始值选为序列总长度的一半为例。在每个子序列之内,使用直接插入排序(插入一个数字,前一个跟后一个相比,如果后一个值比前一个值小则调换两者之间的位置)。进行完第一轮排序之后,减小gap的大小,重复上述操作。由于间隔gap的值在不断减小,也称为减小增量排序,直到gap=1的时候,也就完成了整个序列的排序。
python实现
a = [56,52,-96,-53,23,-789,520] #测试案例
b = len(a) #列表长度
gap = b // 2 #初始步长设置为总长度的一半
while gap >= 1:
for i in range (b):
j = i
while j>=gap and a[j-gap] > a[j]: #在每一组里面进行直接插入排序
a[j],a[j-gap] = a[j-gap],a[j]
j-= gap
gap=gap//2 #更新步长
print(a)