Python数据结构预算法 算法基础(番外1)

主要的排序方法在先前的篇目里面已经介绍了,也应该够用了,今天记作番外篇,介绍额外的几种排序方法

希尔排序:

        希尔排序是插入排序的一种改进,还记得插入排序吗?

        插入排序:设前j个数是有序的,j+1位数与第j位数作比,如果小于第j位,则向前滑动,直到找到应有的位置

        希尔排序将j+1中的1改为了gap,以组为单位,先逐步降低逆序数,最后一遍当gap = 1,将剩余的逆序数调整好,这样子处理,速度比插入排序快。

def insert_sort_gap(gap, li) :
    for i in range(gap, len(li)):   # li[i]是新来的数,li[j]是有序的部分,有序部分从后往前看
        j = i - gap
        empty = li[i]
        while j >= 0 and empty < li[j] :
            li[j + gap] = li[j]
            j -= gap
        li[j + gap] = empty
    return li

def shell_sort(li) :
    d = len(li) // 2
    while d >= 1 :
        insert_sort_gap(d, li)
        d = d // 2
    return li

s = list(range(33))
import random
random.shuffle(s)
print(s)
print(shell_sort(s))
[9, 2, 3, 24, 28, 8, 7, 23, 30, 6, 21, 19, 31, 29, 14, 1, 32, 18, 4, 11, 20, 13, 12, 25, 26, 5, 15, 10, 17, 22, 0, 16, 27]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值