堆堆堆堆化

本文详细介绍了最小堆的调整过程,特别是`min_heapify`函数的实现,该函数用于确保以i为根的子树满足最小堆性质。通过迭代比较并交换父节点与子节点,函数最终使整个子树形成最小堆。辅助函数如`left`、`right`、`parent`和`swap_node`的正确实现是关键。

最小堆就是越小越在上面

其中 pq指向堆,i 为堆元素在数组中的下标。该函数假设元素i对应的子树都已经是最小堆(符合最小堆的要求),但元素i为根的子树并不是最小堆,min_heapify将对元素i及其子树的各结点进行调整,使其为一个最小堆。

(注:假设辅助函数 left、right、parent 和 swap_node 已正确实现,min_heapify 函数可直接使用。)

#include <stdio.h>
#include <stdlib.h>
#include "minbinheap.h"
 
void min_heapify(PMinHeap pq, int i){
	int j = parent(i);
	//if(pq->heap_array[i].value > pq->heap_array[j].value) return;
	for(; j >= 0 && pq->heap_array[i].value > pq->heap_array[j].value; i = j, j = parent(i))
		swap_node(&pq->heap_array[i], &(pq->heap_array[j]));
}

这个地方真没看懂最开始的题目的意思,到底是i的上面的不是最小堆(根)还是下面(子树)不是最小堆????你i为根不就是 其他的子树的跟??(最后答案尝试出来是i作为叶节点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值