堆是完全二叉树,分为大根堆和小根堆
完全二叉树
从左到右依次变满,高度O(logn)
非完全二叉树:
需要知道的几个点【堆可以看做一段连续的数组来存放】
i是索引位置
i位置的左孩子:2 * i + 1
i位置的右孩子:2 * i + 2
i位置的父亲节点:( i - 1 ) / 2
大根堆【每一颗子树的最大值就是头节点的值 】
以6为头的整棵树最大值是6
以5为头的整棵树最大值是5
以4为头的整棵树最大值是4
以3为头的整棵树最大值是3
heapInsert
每往数组里插入1个数,就和父节点一直pk,如果比父节点大就做交换
交换完,此时index应该变成父位置,再和现在新的index的父位置继续比较