堆的学习
1.
堆: 堆(heap)是一种满足特定条件的完全二叉树
小顶堆:任意节点的值 <= 其子节点的值
大顶堆: 任意节点的值 >= 其子节点的值
堆作为完全二叉树的一个特例,具有以下特性。
最底层节点靠左填充,其他层的节点都被填满。
我们将二叉树的根节点称为“堆顶”,将底层最靠右的节点称为“堆底”。
对于大顶堆(小顶堆),堆顶元素(根节点)的值是最大(最小)的。
2. 堆常用于实现优先队列
完全二叉树可以用数组表示,第i个元素的子节点是2*i+1或2*i+2, 而父节点是 (i-1)/2
第一个叶子节点:n/2
最后一个父节点:n/2 -1
3. 使用堆排序:
先建堆, 就是倒序处理所有的父节点, 进行shift down 操作。然后出堆。