堆的基本性质
堆也可以说是一个完全二叉树,就是除了最底层的,其它层是满的,既然我们可以用完全二叉树来表示一个堆,那么我们这里就采用数组结构的二叉树来阐述堆的性质。 假设在这里我们用数组A表示堆,A[i]表示堆里面的第i个元素,于是我们通过二叉树的性质可知:
Parent(i) = i/2
LeftChild(i) = 2*i
RightChild(i) = 2*i+1
就如下图表现所示:
堆的分类
在堆里面,我们可以大致将堆分为三类:最小堆、最大堆、堆
最小堆
只要在二叉树结构里面,对于除了根节点意外的任何节点i都满足:
A[PARENT[i]]<A[i],那么就称具有这种性质的堆为最小堆。
最大堆
与最小堆类似,只要在二叉树结构里面,对于除了根节点意外的任何节点i都满足:
A[PARENT[i]]>A[i],那么就称具有这种性质的堆为最大堆。
堆
对于即即使最小堆也不是最大堆的堆来说,这种对我们就称之为堆。
堆排序,建堆时间O(n),排序时间O(nlogn)
找出若干个数中最大/最小的前K个数,堆排序最好,负责度为n+klogn
堆分类辅助空间O(1),用于交换的时候临时变量
最适合创建一个优先级队列