您的位置:首页 > 其它

大根堆 - max heapify

2016-04-18 20:55 316 查看
大根堆调整(递归形式)

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


大根堆 -> 得到递增序列

小根堆 -> 得到递减序列

堆的调整,基于前提:所有子堆都满足大根堆的性质

-> 初始化序列成大根堆

-> 从每个子堆开始调整,

-> 因此,调整堆的操作既可用于建堆,又可用于调整堆
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: