• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-05-08 12:34 Aet 隐藏边栏 |   抢沙发  11 
文章评分 3 次,平均分 5.0

二叉堆

特性

  • 最大堆的堆顶是整个堆中的最大元素
  • 最小堆的堆顶是整个堆中的最小元素

每次删除旧堆顶,调整后的新堆顶都是大小仅次于旧堆顶的节点。

只要反复删除堆顶,反复调整二叉堆,所得到的集合就会成为一个有序集合。

简述

堆排序算法步骤:

  • 把无序数组构建成二叉堆。需要从小到大排序,就构建成最大堆。需要从大到小排序,就构建成最小堆。
  • 循环删除堆顶元素,替换到二叉堆的末尾,调整堆,产生新的堆顶。

复杂度

名称 最好 平均 最差 空间 稳定性
堆排序 nlog(n) nlog(n) nlog(n) 1

实现

算法导论

堆排序思想:假设对数组A[p...r]排序:首先将数组构建成一个最大堆(或者最小堆,这里的实现采用最大堆)。然后第一个元素就是堆中最大的元素。
将第一个元素与最后一个元素交换,同时堆的规模缩减1,再将堆维持最大堆性质。不断循环最后得到一个排序好的序列

  • 时间复杂度 O(nlogn)
  • 原地排序

堆排序有两个重要操作:

  • heapify(index)操作:维持以index为根节点的子堆的性质。它比较index与其左右子节点的值,选取其最大的那个提升到index节点上。同时递归向下。具体见_heapify()方法说明
  • setupHeap()操作: 建堆操作。它从堆的最低层向上层反复调用heapify操作进行建堆。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享