python数据结构之希尔排序
#-*-coding:utf-8-*-
'''
将序列划分为两部分,将这两部分依次比较,若前大后小,则交换。
将步长除以2(向下取整),直到步长=0,依次比较。
'''
def ShellSort(L):
step = len(L)//2 # 设定步长,Python2则用/
while step > 0:
print('step = ' + repr(step))
for i in range(step, len(L)):
while i >= step and L[i-step] > L[i]:
print('i=' + repr(i) + ' i-step=' + repr(i-step))
print(repr(L[i]) + '<-->' + repr(L[i-step]))
L[i], L[i-step] = L[i-step], L[i]
print(L)
i -= step
step = step//2
return L
L = [5,4,2,3,6,1,0]
print("原始序列:")
print(L)
print("希尔排序:")
print(ShellSort(L))
程序输出结果:
原始序列:
[5, 4, 2, 3, 6, 1, 0]
希尔排序:
step = 3
i=3 i-step=0
3<-->5
[3, 4, 2, 5, 6, 1, 0]
i=5 i-step=2
1<-->2
[3, 4, 1, 5, 6, 2, 0]
i=6 i-step=3
0<-->5
[3, 4, 1, 0, 6, 2, 5]
i=3 i-step=0
0<-->3
[0, 4, 1, 3, 6, 2, 5]
step = 1
i=2 i-step=1
1<-->4
[0, 1, 4, 3, 6, 2, 5]
i=3 i-step=2
3<-->4
[0, 1, 3, 4, 6, 2, 5]
i=5 i-step=4
2<-->6
[0, 1, 3, 4, 2, 6, 5]
i=4 i-step=3
2<-->4
[0, 1, 3, 2, 4, 6, 5]
i=3 i-step=2
2<-->3
[0, 1, 2, 3, 4, 6, 5]
i=6 i-step=5
5<-->6
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]