数据结构:堆

本文介绍了堆这种基于完全二叉树的数据结构,以及如何利用堆实现堆排序和优先队列。堆排序是一种原地排序算法,通过调整堆结构来达到排序的目的。优先队列则是借助堆的特性,实现高效插入和删除操作。文章以小顶堆为例,展示了包含1,4,2,6,8元素的堆,并提供了使用Java的PriorityQueue实现堆排序的代码示例。
摘要由CSDN通过智能技术生成

堆 是一种基于[完全二叉树]的数据结构,可使用数组实现。以堆为原理的排序算法称为[堆排序],基于堆实现的数据结构为[优先队列]。堆分为[大顶堆]和[小顶堆],大(小)顶堆:任意节点的值不大于(小于)其父节点的值。

完全二叉树定义: 设二叉树深度为 kk ,若二叉树除第 kk 层外的其它各层(第 11 至 k-1k−1 层)的节点达到最大个数,且处于第 kk 层的节点都连续集中在最左边,则称此二叉树为完全二叉树。

 如下图所示,为包含 1, 4, 2, 6, 8 元素的小顶堆。将堆(完全二叉树)中的结点按层编号,即可映射到右边的数组存储形式。

Picture9.png

 通过使用「优先队列」的「压入 push()」和「弹出 pop()」操作,即可完成堆排序,实现代码如下:

//初始化小顶堆
Queue<Integer> heap = new PriorityQueue<>();

//元素入堆
heap.add(1);
heap.add(4);
heap.add(2);
heap.add(6);
heap.add(8);

//元素出堆(从小到大)
heap.poll(); // ->1
heap.poll(); // ->4
heap.poll(); // ->2
heap.poll(); // ->6
heap.poll(); // ->8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值