解题思路:
注意事项:
参考代码:
def heapify(nums, n, i):
if len(nums) <= 1:
return nums
largest = i # 初始化最大值为当前节点
left = 2 * i + 1 # 左子节点的索引
right = 2 * i + 2 # 右子节点的索引
# 如果左子节点存在且大于当前节点,则更新最大值
if left < n and nums[left] > nums[largest]:
largest = left
# 如果右子节点存在且大于当前节点,则更新最大值
if right < n and nums[right] > nums[largest]:
largest = right
# 如果最大值不是当前节点,则交换它们的位置,并递归调整子树
if largest != i:
nums[i], nums[largest] = nums[largest], nums[i]
heapify(nums, n, largest)
def heap_sort(nums):
n = len(nums)
# 构建最大堆
for i in range(n // 2 - 1, -1, -1):
heapify(nums, n, i)
# 逐步取出最大值并进行排序
for i in range(n - 1, 0, -1):
nums[0], nums[i] = nums[i], nums[0] # 将最大值与最后一个元素交换
heapify(nums, i, 0) # 调整新的根节点
return nums
n = int(input())
nums = list(map(int, input().split()))
result = heap_sort(nums)
print(' '.join(map(str, result)))
0.0分
0 人评分
程序员的表白 (C语言代码)浏览:706 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:631 |
printf基础练习2 (有点不明白)浏览:887 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:566 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:804 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:934 |
完数 (C语言代码)浏览:757 |
C语言训练-自由落体问题 (C语言代码)浏览:650 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:590 |
蚂蚁感冒 (C语言代码)浏览:1408 |