python算法-0排序-7堆排序

python算法-0排序-7堆排序

python算法-0排序-7堆排序

 

在线运行:https://pyleetcode.gitee.io/codes_html/SYL_0%E6%8E%92%E5%BA%8F_7%E5%A0%86%E6%8E%92%E5%BA%8F.html

def sort(array):
    # 遍历非叶子节点,建立堆结构数组
    for i in range(int(len(array) / 2) - 1, -1, -1):
        adjustHeap(array, i, len(array))

    print('arr of heap:', array)
    # 堆积树建立完成,开始排序。
    for j in range(len(array) - 1, 0, -1):
        # 一开始最大元素是[0],然后被换到最后一个
        # 从n-0,不断和[0]元素交换,重新堆排序(既把第2、3..n大的翻转到最上面)
        array[0], array[j] = array[j], array[0]
        adjustHeap(array, 0, j)


def adjustHeap(array, i, length):
    # 对第i号进行堆调整
    # 获取非叶子节点的数据
    temp = array[i]
    # 非叶子节点的左子节点
    k = 2 * i + 1
    # 遍历对比k后面的节点,把temp放入合理位置
    while k < length:
        #  k + 1 < length 确保有左右节点才比较
        if k + 1 < length and array[k] < array[k + 1]:  # 如果左子节点比右子节点小,k就切换到右子节点
            k += 1
        # 如果子节点有更大的
        if array[k] > temp:
            # 父节点替换为更大的
            array[i] = array[k]
            # 记录当前最大点位置
            i = k
        else:  # 直接打断,因为堆特点,后面层的更不满足
            break
        # k切换到下一个左子节点
        k = 2 * k + 1
    # 此时i是空位,i上层的都比temp大,temp放到这里
    array[i] = temp


if __name__ == '__main__':
    data = [16, 25, 39, 27, 12, 8, 45, -10, 63]
    print('arr', data)
    print('start max heap sort')
    sort(data)
    print('arr sorted:', data)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值