将元序序列(28,25,16,36,18,321 大根堆, 写出 的 整 程。
时间: 2023-09-29 14:07:32 浏览: 140
/*1.编写完整的堆排序程序*/
以下是使用 Python 语言实现的大根堆构建算法:
```python
def heapify(arr, n, i):
largest = i # 初始化最大值为根节点
l = 2 * i + 1 # 左子节点索引
r = 2 * i + 2 # 右子节点索引
# 如果左子节点比根节点大,则更新最大值
if l < n and arr[l] > arr[largest]:
largest = l
# 如果右子节点比根节点大,则更新最大值
if r < n and arr[r] > arr[largest]:
largest = r
# 如果最大值不是根节点,则交换根节点和最大值节点
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
def build_heap(arr):
n = len(arr)
# 从最后一个非叶子节点开始进行堆化
for i in range(n // 2 - 1, -1, -1):
heapify(arr, n, i)
# 示例
arr = [28, 25, 16, 36, 18, 321]
build_heap(arr)
print(arr)
```
输出结果为:
```
[321, 36, 28, 25, 18, 16]
```
即元素序列 `[28, 25, 16, 36, 18, 321]` 经过大根堆构建后得到的序列为 `[321, 36, 28, 25, 18, 16]`。
阅读全文