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   tongqingliu  阅读(232)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

统计信息

点击右上角即可分享
微信分享提示