(二叉)对数据结构是一种数组对象,可以被视为一种完全二叉树。树中每个节点与数组中存放该节点值得那个元素对应。
表示堆的数组A是一个具有两个属性的对象:length[A]是数组中的元素个数,heap-size[A]是存放在A中的堆的元素的个数。也就是,虽然A[1..length[A]]中都可以包含有效值,但是在heap-size[A]之后的元素都不属于相应的堆。
树的根为A[1],给定某个节点的下标i,其父节点Parent(i)为 i/2 取下限,左儿子Left(i)的下标为 2i, 右儿子为 2i+1。
堆分为最大堆与最小堆(小根堆)。对于最大堆是除了根以外的每个节点i,有A[parent(i)]>=A[i],
最小堆刚好相反,A[parent(i)]<=A[i]
堆排序中使用最大堆,最小堆通常用于构造优先队列。
堆中的高度定义为从本节点到叶子节点的最长简单路径上边的树木,堆的高度是指树根的高度,一个具有n个元素的堆的高度为 lgn 取下限
堆结构上的一些基本操作的运行时间至多与堆的高度成正比 O(lgn)
在高度为h的堆中,最多的元素个数为2h+1-1,最少的元素个数为2h
堆排序的的运行时间为O(n*lgn),空间复制度为O(1)