小顶堆排序怎么排_面试被问到堆排序,用这篇文章怼过去

本文介绍了小顶堆的概念,包括其定义、性质、存储方式,并详细讲解了插入元素、删除堆顶元素以及建堆的过程,分析了各自的时间复杂度。通过堆排序的原理,阐述了堆排序的时间复杂度和空间复杂度优势。
摘要由CSDN通过智能技术生成

前言

哈哈,继之前俩篇“回怼”文章,又整出一篇来自堆排序的文章。文章不是我原创,参杂了一些互联网搜集的内容(侵删),以及自己的理解。

之前俩篇文章,分别如下:

面试被问到Spring IOC、AOP和动态代理,用这篇文章怼过去

面试被问到Java虚拟机,用这篇文章怼过去

正文

何为堆?

首先堆是一种树,一种特殊的树。只要满足下面两个条件,它就是一个堆:

(1)一颗完全二叉树;

(2)某个节点的值总是不大于(或不小于)其父节点的值。

根节点最大的堆叫做大顶堆,根节点最小的堆叫做小顶堆。

几种堆

1、满二叉树

满二叉树是指所有层都达到最大节点数的二叉树。比如:

6fff23350afb73a6d9212ed1c8acba0a.png

2、完全二叉树

完全二叉树是指除了最后一层其它层都达到最大节点数,且最后一层节点都靠左排列。比如,下面这颗树:

72c8f229510157f0cfecbedd769895fb.png

可见,满二叉树是一种特殊的完全二叉树。

那么,使用什么结构存储完全二叉树最节省空间呢?

我们可以看见,完全二叉树的节点都是比较紧凑的,且只有最后一层是不满的,所以使用数组是最节省空间的,比如上面这颗完全二叉树我们可以这样存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值