堆的两个特性:
1、 结构性: 用数组表示的完全二叉树
2、有序性:任一节点的值是其子树所有节点的最大值或最小值(最大堆或者最小堆)
最大堆 的插入 :
将元素插入到数组的最后一个(lastIndex),通过 lastIndex /2 取得上一层节点的值,进行比较,如果父节点大,则插入到lastindex,如果父节点小,则将父节点换到lastindex,将插入的元素换到父节点位置,如此循环。
最大堆 的删除
返回的是最大值,是取跟节点的值删除并返回,然后取最大堆中最后一个元素从根节点开始,由根节点位置开始向下过滤排序,父节点对比子节点(取子节点中最大的一个节点)如果大于子节点则证明元素找到了他应该放的位置,如果小于子节点则将子节点移至父节点,继续往下循环找,直至大于子节点或者到最后节点。
最大堆的建立 :
两种 一种为循环插入, 复杂度为Nlog2N 较复杂, 另一种为一次性建立成完全二叉树,然后从最后一个有子节点的节点开始,与子节点进行对比,大则不动,小则将子节点给调上来