shell排序在python中的实现

 第一次接触到shell排序,算法比较有意思,简单记录一下。

它的思想是先比较序列中距离比较远的元素,这样可以快速减少大量的无序情况,从而减轻后续操作。在python中的代码如下:

#coding: utf-8
def shell_sort(A, n):
    m=0
    k=0
    gap=n  
    while gap>1:
        gap/=2
        print '\n'
        print 'gap=',gap
        for i in range(gap,n):
            j=i-gap
            m+=1
            print 'j=',j
            print '中间层第%d次循环'%m
            while (j>=0 and A[j]>A[j+gap]):
                A[j],A[j+gap]=A[j+gap],A[j]
                j-=gap
                k+=1
                print '内层第%d次循环:'%k,A
    return A                                                                 											
         循环一共有三层,为了能够明白循环的细节(事实上并不需要知道),我加了几个计数器来记录它的运行过程。假设有一个无序序列 [3,7,2,5,1,4,6] ,运行结果如下:
>>> shell_sort([3,7,2,5,1,4,6], 7)
gap= 3
j= 0
第二层第1次循环
j= 1
第二层第2次循环
内层第1次循环: [3, 1, 2, 5, 7, 4, 6]
j= 2
第二层第3次循环
j= 3
第二层第4次循环

gap= 1
j= 0
第二层第5次循环
内层第2次循环: [1, 3, 2, 5, 7, 4, 6]
j= 1
第二层第6次循环
内层第3次循环: [1, 2, 3, 5, 7, 4, 6]
j= 2
第二层第7次循环
j= 3
第二层第8次循环
j= 4
第二层第9次循环
内层第4次循环: [1, 2, 3, 5, 4, 7, 6]
内层第5次循环: [1, 2, 3, 4, 5, 7, 6]
j= 5
第二层第10次循环
内层第6次循环: [1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
     第二层第一次循环时,由于3不大于5,因此没有进入内层循环,序列没有打印出来。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值