X(大或小)根堆的构建:
堆的本质就是一棵完全二叉树(大根堆:树中任意一个子树的最大值都是它的头部组成的树)
一个大根堆或者小根堆,它的创建过程:
参考完全二叉树父子节点之间的关系(父节点为i,则左孩子为2*i+1,右孩子为2*i+2),就可以对数组进行构建,通过对数组元素的移动,来达成大根堆的构建。
比如数组[3, 1, 2, 5, 0],构建一个小根堆
相关的时间复杂度:
新添加一个元素,调整为小根堆:O(logN)【即树的高度】
创建一个小根堆:O(N)【即每个元素添加进来时消耗的时间总和】
X根堆的排序:
相关时间复杂度:
首先是对数组遍历了一遍(heapsize的减操作),这一步是O(N),然后在每一次遍历的时候都会进行一次heapify的操作,这一步是O(logN)
因此总共耗时为:O(N*logN)