【排序】用Python实现八大排序算法--堆排序


#获得大顶堆
def adjustHeap(ls,start,end):
    while start*2 <= end:
        j = start * 2
        if j<end and ls[j] < ls[j+1]:  #让j指向大的孩子
            j+=1
        if ls[start] < ls[j]:
            ls[start],ls[j]=ls[j],ls[start]
            start = j
        else:
            break


def heapSort(ls):
    n = len(ls)
    ls.insert(0, 0) #第一位不用
    for i in range(n//2,0,-1): #初始化堆,使得每个节点符合堆的要求
        adjustHeap(ls, i,n)
    while n > 1:
        ls[1],ls[n] = ls[n],ls[1] #将第一个最大元素沉到底部,从而获得最后的升序
        n -= 1
        adjustHeap(ls,1,n)
    return ls[1:]


ls=[3,1,100,1,20,4,70,39,48]
res=heapSort(ls)
print(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值