shell排序在python中的实现

    xiaoxiao2021-04-17  40

     第一次接触到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,因此没有进入内层循环,序列没有打印出来。
    转载请注明原文地址: https://ju.6miu.com/read-674346.html

    最新回复(0)