1.如何构造堆(以小根堆为例)
①以完全二叉树的方式从左往右将新元素插入到最后的位置;
②从下往上更新,与父结点比较,若小于父结点,则与父结点交换位置,若大于则更新完成。
如:10,9,8,7,6构造小根堆
2.如何进行堆排序
①将堆顶元素与最后一个未固定的元素交换;
②从上往下,若父结点小于左右子结点则更新完成,否则找出左右子结点中小于父结点的更小的那一个,与父结点交换位置;
③循环①②,每轮确定一个数的位置,直到所有节点被固定。
3.如何找出2000万个数中前1000个最大的数
①使用前1000个数构造小根堆;
②遍历后续的数,若小于堆顶元素则跳过,若大于则替换堆顶元素并更新堆;
更新的流程为:从上往下,若父结点小于左右子结点则更新完成,否则找出左右子结点中小于父结点的更小的那一个,与父结点交换位置。