堆排序(啊哈算法版)

本文介绍了堆排序算法,重点讲解了最小堆的概念和构建过程。首先,文章提及堆排序的前提知识,包括树、二叉树和完全二叉树的特点。接着,通过一个数据实例展示了如何构建最小堆,并解释了如何将最小值调整到堆顶,同时保持父节点小于子节点。文章还提出了如何确定最后一个非叶节点的编号和如何实际实现最小堆的问题。虽然构建了最小堆,但文章指出这还不足以直接得到排序结果,随后介绍了解决这个问题的思想。最后,文章提供了相关的代码实现。
摘要由CSDN通过智能技术生成

题意:
——给出n个数,从小到大排序。

前提知识:
——了解什么是树,什么是二叉树,什么是完全二叉树,以及特点

最小堆:

堆顶是最小值,一般放于数组的第一个位置,但是构建完最小堆后不能保证数据一定是按从小到大放置。
最小堆定义:在一棵完全二叉树中,所有的父结点都比子结点要小。
这里未强调左右子结点谁大谁小,请看第二个图(最小堆)便可明白。

堆排序思想:
以该数据为例:构建最小堆

14
99 5 36 7 22 17 46 12 2 19 25 28 1 92

构建一个完全二叉树
在这里插入图片描述显而易见,此刻堆顶并不是最小值,
下面就是想办法如何把最小值上升到堆顶,同时保证所有的父结点都比子结点要小。

注意这一知识:
——一棵大树可看作由许多的小树构成。
因此,

先从最小的小树开始,即首先从叶结点开始。
但是叶结点没有儿子,所以以叶结点为跟结点的子树都符合最小堆特性,即父结点比子节点的值小。
所以从最后一个非叶结点开始构建最小堆,
即把7号结点为根结点的小树构建成最小堆;
构建完成后再一个接一个继续构建,即按6,5,4&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值