·什么是堆
堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。(摘自百度百科)具体来说就是将所有元素按照完全二叉树的顺序存储方式并且满足堆中某个节点的值总是不大于或不小于其父节点的值这一性质存储在一个一维数组中,那么我们就称为堆。
如下图:
·大小堆的定义
刚才我们在给出性质的时候提到了每个节点的值总是不大于或不小于其父节点的值。那么这就是堆中的第二个特点,就是俗称的大小堆。
小堆:任意一个节点的值小于等于它的左右孩子的值,位于这个堆顶端的值最小并且从根节点到每个节点在元素的序列大小上都是递增的。
大堆:与上面相反。
我们上面的图片就是一个最小堆的例子。
·堆如何创建
堆的创建刚才提到了就是一个一维数组,所以我们直接定义一维数组即可:
int array[]={1,2,3,4,5,6,7}
·大小堆的调整
1.设一个节点的下标为parent。
2.找到该节点的左孩子left=parent*2+1。
3.如果该节点拥有右孩子right=parent*2+2,比较并找出左右孩子中最小的孩子。
4.如果parent大于左右孩