堆排序 HeapSort

分为 大根堆 和 小根堆,均是完全二叉树

大根堆 要求每个内部节点的值大于其左右子节点的值

性质:由最大堆的要求来看,大根堆总能保证根节点是堆中值最大的

堆排序算法就是根据大根堆的这种性质,

0)初始化二叉树(堆)

1)调整堆使其为全部元素( n个 )的大根堆

2)拿出根节点(n个中最大值),调整剩余的(n-1)个元素使其为大根堆

3)拿出根节点(n-1个中最大值),调整剩余(n-2)个元素使其为大根堆

。。。

。。。

这样,每次拿出的元素都是剩余元素中的最大者,也即拿出的元素在原始数组中

是最大者,次大者,次次大者,。。。这样就完成了排序


【注】

0)初始化的过程个人感觉不是很重要,常见的做法是直接根据广度优先的做法把数组中的元素排列到二叉树中

1)调整堆的过程就是循环遍历所有非叶子节点,调整使其值大于左右子节点,循环之后,形成新的大根堆


相关调整堆的过程参见,堆排序及其分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值