defbuild_heap(arr):
n =len(arr)# 从最后一个非叶子节点开始,向上调整每个子树使其满足堆的性质for i inrange(n //2-1,-1,-1):
heapify(arr, n, i)defheapify(arr, n, i):
largest = i # 当前节点的索引
left =2* i +1# 左子节点的索引
right =2* i +2# 右子节点的索引# 比较左子节点与当前节点的值,更新最大值索引if left < n and arr[left]> arr[largest]:
largest = left
# 比较右子节点与当前节点的值,更新最大值索引if right < n and arr[right]> arr[largest]:
largest = right
# 如果最大值索引不是当前节点,则交换当前节点与最大值节点的位置,并递归调整子树if largest != i:
arr[i], arr[largest]= arr[largest], arr[i]
heapify(arr, n, largest)