大根堆调整(递归形式)
def heapify(dList, root, boundary):
child = root * 2 + 1
large = root
if child <= boundary and dList[large] <= dList[child]:
large = child
if child+1 <= boundary and dList[large] <= dList[child+1]:
large = child + 1
if large != root:
dList[root], dList[large] = dList[large], dList[root]
heapify(dList, large, boundary)
return dList
大根堆调整(非递归形式)
def heapifyNOR(dList, root, boundary):
child = root * 2 + 1
large = root
while child <= boundary:
if dList[large] <= dList[child]:
large = child
if child+1 <= boundary and dList[large] <= dList[child+1]:
large = child + 1
if large == root:
break
dList[root], dList[large] = dList[large], dList[root]
root = large
child = root * 2 + 1
return dList
大根堆 -> 得到递增序列
小根堆 -> 得到递减序列
堆的调整,基于前提:所有子堆都满足大根堆的性质
-> 初始化序列成大根堆
-> 从每个子堆开始调整,
-> 因此,调整堆的操作既可用于建堆,又可用于调整堆