0
点赞
收藏
分享

微信扫一扫

《数据结构与算法设计之美》学习笔记(十一) 堆和堆排序

千妈小语 2022-02-26 阅读 41

文章目录

前言

一、堆的定义

(1)堆是一个完全二叉树;
(2)堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。

二、堆的基本操作

一般我们使用数组来存储堆结构,对于数组存储的堆结构,除根结点外,i*2为左子树,i*2+1为右子树

1.往堆中插入数据

新增数据添加到数组的末尾,然后通过不断地和父节点比较来维护堆,直到满足堆定义的第(2)条。

2.从堆中删除数据

将结点删除后,从该结点的左右子树里找出一个最大/最小值来使堆满足定义(2),但可能会导致数组空洞,可以采用先将数组里的最后一个值放到该删除位置,因为堆操作都是交换,所以可以堵住该漏洞。

三、堆排序的实现
假设数组最开始有一个堆顶,也就是下标为1的那个元素。而后面的数据通过一个一个的插入进去,也就是进行堆的插入排序来完成。一般有两种插入的方式,自下往上和自上往下。

举报

相关推荐

0 条评论