数据结构基础 之 二叉堆实现堆排序

堆是一种完全二叉树,分为大顶堆和小顶堆。堆排序利用堆的特性,通过构建和调整堆来实现排序。文章详细介绍了堆的定义、堆排序的思想以及堆排序的过程,并给出了代码示例。
摘要由CSDN通过智能技术生成

【摘要】

堆实际上是一棵完全二叉树,也称二叉堆。本文首先对二叉堆的定义与相关概念给予阐述,而后给出二叉堆的代码实现,文末结合实际代码实现给出算法要点分析。

【堆】

堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:

Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]

 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。

 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]称为小顶堆。由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字中最大的,小顶堆的堆顶的关键字是所有关键字中最小的。

【堆排序的思想】

  利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从无序中选择最大记录(最小记录)变得简单。

  • 其基本思想为(大顶堆):

   1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区;

   2)将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,......Rn-1)和新的有序区(Rn),且满足R[1,2...n-1]<&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值