谢尔排序Shell Sort

  • 谢尔排序以插入排序作为基础
  • 子列表的间隔一般从n/2开始
  • 大致介于O(n)和O(n^2)之间,如果将间隔保持在 (1,3,5,7,15,31等等),谢尔排序的时间复杂度约为O(图片说明 )

def shellSort(alist):
    sublistcount = len(alist)//2  #间隔设定
    while sublistcount > 0:
        #子列表排序
        for startposition in range(sublistcount):
            gapInsertionSort(alist,startposition,sublistcount)
        print('After increments of size',sublistcount,'The list is',alist)
        sublistcount = sublistcount // 2 #间隔缩小
def gapInsertionSort(alist,start,gap):
    for i in range(start+gap, len(alist), gap):
        currentvalue = alist[i]
        position = i
        while position >= gap and alist[position-gap] > currentvalue:
            alist[position] = alist[position - gap]         
            position = position - gap
        alist[position] = currentvalue
全部评论

相关推荐

10-25 14:25
门头沟学院 C++
投的服务端研发岗,基本上就只问了实习和简历,啥八股都没有,也没给算法题,然后就结束了
ngiv:你看看别人面经就知道了, 拼多多三面很多主管面, 基本上就是20分钟纯聊天, 当然也看到有问了一个小时的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-29 21:31
大疆 硬件工程师 30.0k*15.0
快要三方开始纠结offer的到期男大:dji和影石我理解开奖了,华为你这个15级是怎么问出来的
点赞 评论 收藏
分享
代码渣渣正在背八股:不招35岁以上,你的简历已进入人才库。
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务