堆排序的时间复杂度
1 引言 2 堆排序 大根堆 ,任意一节点的值小于子节点的值称为 小根堆 。一般来说,堆可以用一个一维数组 A [ n ] A[n] A [ n ] 表示。 2.1 基本操作 2.1.1 获取父、子节点 Θ ( 1 ) \Theta(1) Θ ( 1 ) PARENT(i) return i/2 LEFT(i) return 2i RIGHT(i) return 2i+1 2.1.2 维护堆的性质 i i i 的子树都是大根堆的情况下,使以 i i i 为根节点的子树遵循大根堆的性质;此操作的伪代码如下: MAX-HEAPIFY(A,i) i = LEFT(i) r = RIGHT(i) if l <= A.heap-size and A[l] > A[i] largest = l else largest = i if r <= A.heap-size and A[r] > A[largest] largest = r if largest != i exchange A[i] with A[largest] MAX-HEAPIFY(A,largest) Θ ( 1 ) \Theta(1) Θ ( 1 ) ;那么MAX-HEAPIFY对于子树的时间代价最多为多少呢,可以用如下递归式表示: T ( n ) ≤ T ( 2 n / 3 ) + Θ ( 1 ) T(n) \leq T