python实现堆排序

堆排序的序列可以看成一棵完全二叉树,完全二叉树比较适合用数组来存储,数组下标从0开始存储,这样的话下标为i节点的左孩子为2i+1,右孩子为2i+2。父节点为i/2。

堆排序代码(python):

def AjustHeap(i,HeapList,LastIndex):   # i是父节点
    temp = HeapList[i]
    j = i * 2 + 1      # 左孩子
    while(j <= LastIndex):
        if j < LastIndex and HeapList[j] < HeapList[j+1]:
            j = j + 1
        if temp >= HeapList[j]:
            break
        else:
            HeapList[i] = HeapList[j]
            i = j
            j = j * 2 + 1
    HeapList[i] = temp
"堆排序"
List1 = [101,843,206,156,423,366,624,1200]   
ListLen = len(List1)
for i in range((ListLen-2)// 2, -1, -1):     # 从最后一个非叶子结点开始
     AjustHeap(i,List1,ListLen-1)
'''堆顶与最后一个记录交换位置,并去除后再重新调整'''
for j in range(ListLen-1,0,-1):
    List1[0],List1[j] = List1[j],List1[0]
    AjustHeap(0,List1,j-1)
List1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值