最小堆(小根堆)

本文详细介绍了最小堆的数据结构定义及其表示方式,包括如何通过数组实现完全二叉树的存储。此外,还深入探讨了最小堆的基本操作如heapify、heapinsert及heappop,并进一步解释了这些操作在堆排序及优先队列实现中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最小堆定义:

完全二叉树,且其任意节点键值小于其左子树所有节点和右子树所有节点。堆顶总是保存堆的最小值。

堆的表示:

堆是完全二叉树,所以可以用数组表示堆。设数组heap[n]为堆,heap[1]表示根节点,对于除根节点外的任意节点heap[i],其父节点为heap[i/2],其左儿子为heap[i*2],右儿子为heap[i*2+1]。

堆的操作:

heapify(heap,i)若节点heap[i]左子树和右子树都满足最小堆的性质,而heap[i]节点不满足最小堆性质,即heap[i]>heap[i*2]或者heap[i]>heap[2*i+1],则操作heapify(heap,i)调整heap[i]的位置来保持堆的性质。这是堆的基本操作。

heapinsert(heap,val)往堆里面插入值val,新增节点heap[n+1]=val,并比较新增节点和其父节点大小,不断调整新增节点的位置,保持最小堆的性质。

heappop(heap)弹出堆顶元素,并令heap[0]=heap[n],堆大小减一,之后执行heapify(heap,0)来维持堆的性质。

 

堆排序和优先队列:

由上述堆的基本操作基本可以实现堆排序和优先队列。

堆排序:1,在线算法,不断heapinsert接受所有的数据后,heappop输出所有数据

                2,离线算法,利用heapify操作创建最小堆,heappop输出所有数据

优先队列:heapinsert插入优先队列,heappop弹出优先队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值