解题思路:

注意事项:

参考代码:

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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论