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)