堆初始化和堆排序

最近刷笔试题的时候遇到:某堆初始化的结果,某堆排序后的结果。

之前学数据结构的时候已经学过,然而没有牢固的影响,在这里做笔记。以免自己再忘却。

 

 

首先,堆是完全二叉树却不是二叉查找树。

所以对堆进行初始化,只是找出了第一个最大的(最大堆),或者最小的值(最小堆)。

举个例子:设有一个无序序列 { 1, 3, 4, 5, 2, 6, 9, 7, 8, 0 }。(接下来参考大佬的博客的图)

很明确的看出来:

先建立一个完全二叉树。

建树之后按照从最后往前的顺序,不断的进行一个选择交换。

最终找到了最大的交换到了根节点。(这也就是为什么堆排序是选择排序。它都是每次找到最大或者最小)

上面就完成了堆的初始化。

所以初始化后的序列【9,8,6,7,2,1,4,3,5,0】

 

而接下来整个堆排序的过程大概如下:

1.把根节点和末尾结点交换,并且弹出末尾点。  所以弹出9,这个9就存储进了数组里。 数组第一个值(最大值)就排序好了。

2.接下来按照初始化的方法,继续排序。

重复1··2 一直到堆为空。

至此,每次弹出去的都是最大值,9,8,7,6·······

整个数组堆排序完成。

详细图如下:

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值