tongqingliu

保持学习的态度

python数据结构之希尔排序

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]

posted on 2017-09-21 22:07  tongqingliu  阅读(231)  评论(0编辑  收藏  举报

导航