大顶堆和小顶堆
大顶堆就是节点比左右孩子都大构建的完全二叉树
小顶堆是节点比左右孩子都小构建的完全二叉树
使其存放到数组中,各个节点的下标的计算与完全二叉树中左右孩子与父节点的计算关系一样,依次递推根节点的下标一定是0,从而回溯得到各个节点的下标。
其次就是维护大顶堆的性质,使每一个非叶子结点,使其左右孩子都小于他,也就是比较和交换操作使这三个最大的当父节点,时间复杂度为logn
第一个步骤就是建堆,通过节点个数与第一个非叶子结点的关系,2n-1得第一个非叶子结点,依次递减,每一个阶段都符合堆性质,在舰队不对过程中,如果出现不了不符合性质的节点,那么可能会改变之前已经建好的树 ,这样需要递归进行检查是否符合性质。
第二步骤,进行排序,这时得到第一个最大值拿出来,与最后一个位置的元素交换位置,再update堆,得到第二个最大值与堆中的最后一个位置交换位置,依次这样,可以用循环加递归进行操作。
来个怪图(我菜呜呜呜!)