堆结构(重点掌握)——python不仅涉及堆排序,还涉及贪心算法等众多问题

本文介绍了堆结构中的heapinsert和heapify过程,详细解析了如何在Python中构建大根堆。heapinsert确保每个子树的最大值为子树头部,heapify通过交换和调整保持大根堆性质,并在Python实现时注意与C、Java的区别,如索引处理和无自减操作。
摘要由CSDN通过智能技术生成

理解对结构(左神视频)

1、用户给了一个黑箱,要求每次都往黑箱里面加一个数字,同时还需要弹出其中的最大值,即heapinsert 和heapify的过程。
2.heapinsert:
就是实现大根堆的过程,每次保证:在任何一个子树中,最大值都是这个子树的头。
3、heapify:
就是再把大根堆的第一个数字和和最后一个数字交换以后,把数组的大小减一,则最后一个数就是最大值。
剩余的n-1个数,从上往下找左右子数中比自己大的数,交换,使得最终依然是个大根堆,把大根堆第一个与最后一个数交换,数组大小减一,
往复上述过程。

python:实现时需要注意(0-1)//2==-1,不同于C和Java; 2、需要注意python没有自减操作。

代码

import random

#功能是:构建大根堆
#大根堆概念:在任何一个子树中,最大值都是这个子树的头
def heapInsert(arr,index):
	#python中(0-1)//2==-1,所以0位置要排除在外,区别于java和C语言
	while index>0 and (arr[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值