解题思路:
注意事项:
参考代码:
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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复