堆的基本操作 自己总结

在这里插入图片描述

堆排序总结:
建堆:
a.找到最后一个结点的父节点,数组下标为(n-1)/2,然后“完全下沉”
b.从上面那个结点挨个调整到第一个节点。
也就是每个节点做 ”完全下沉“ 操作,就是要下沉 每一个变动了的结点,直至到达尾结点或者符合条件。

堆下沉:(完全下沉)
一定是要把这个结点换过来的结点 继续检查交换 ,直到不能再交换 或者 到达二叉树末尾
也就是不是只交换一次,是要把所有变动了的结点都进行检查,直至都符合条件。是一个连锁检查。

堆上浮:(完全上浮)
这里不用判断是左枝还是右枝,因为如果是左枝直接比较;
如果是右枝,因为原来的小顶堆是稳定的,那么左枝肯定要比父节点大,所以肯定不会是左枝移上去,唯一有可能移上去只能是右枝,
所以不用判断左右枝,直接处理新建的结点就行
要注意,一定是要把这个结点换过来的结点 继续检查交换 ,直到不能再交换 或者 到达二叉树顶点
上浮与下沉一样,也是完全上浮。也就是不是只交换一次,是要把所有变动了的结点都进行检查,直至都符合条件。是一个连锁检查

堆插入:
插尾:
在最后一个之后插入,
然后对此结点作完全上浮:

堆删除:
砍头:
堆删除是 砍掉 父节点。去掉父节点后,为了维护堆的形式,然后把最后一个结点挪到父节点,然后重新 下插父节点。

堆排序:
就是循环删除操作:
a.砍头
b.尾(结点)补头(节点)
c头(结点)下沉
重复abc

a.首先可以看到堆建好之后堆中第0个数据是堆中最小的数据。
b.取出这个数据再执行下堆的删除操作。(也就是去掉头节点,然后把尾结点补上来,进行下插,重新调整好堆)
c.这样堆中第0个数据又是堆中最小的数据,重复上述步骤直至堆中只有一个数据时就直接取出这个数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值