堆的构建(向上调整建堆,向下调整建堆)
向上调整,向下调整算法详细
直接利用数组建堆。
1、 向上调整建堆:
- 时间复杂度: N*log(N)
1、 利用向上调整算法直接在数组上面建堆
模拟插入过程:
下标为0的数就一个,既可以是大堆也可以是小堆。直接对每个数进行向上调整。后面的数假装是插入的,然后一个一个向上调整。
时间复杂度:N x logN
for(i=1;i<n;i++)
{
Adjustup(a,i);
}
2、向下调整建堆:
- 时间复杂度:O(N)
从最后一个叶子的父亲开始向下调整。也就是从最后一棵树开始挑,但是叶子结点没有调整的必要,叶子天生就是大堆或者小堆。所以从倒数第一个非叶子结点开始调整(即最后一个结点的父亲),到根节点结束。
最后一个叶子下标n-1,它的父节点parent=(child-1)/2=(n-1-1)/2
for(i=((n-1