【排序算法】之堆排序

堆排序是一种基于完全二叉树的排序算法,通过构建大根堆或小根堆来选择最大或最小元素。本文详细介绍了堆的定义、堆排序原理,包括筛选法、构造初始堆的过程,并提供了核心代码实现。需要注意的是,由于建立初始堆的时间复杂度,堆排序不适合小规模数据排序。
摘要由CSDN通过智能技术生成

特别说明,这里的序列都是从1开始。

1、什么是堆

对于n个元素的序列{R1, … , Rn}当且仅当满足下列关系之一时,称之为堆:

(1) Ri <= R2i+1 且 Ri <= R2i+2 (小根堆)

(2) Ri >= R2i+1 且 Ri >= R2i+2 (大根堆)

2、什么是堆排序

堆排序是一种树形选择排序,它的特点是在排序的过程中,将r[1..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在联系,在当前无序区中选择关键字最大或者最小的记录。

堆实际上是一棵以顺序方式存储的完全二叉树,并满足如下性质:树中任一非叶子结点的关键字均不大于或者不小于其左右孩子的关键字。例如关键字序列(12, 36, 24, 85, 47, 30, 53, 91)和(96, 83, 27, 28, 11, 09)分别是满足上述性质的小根堆和大根堆。第一个序列对应的二叉树如下图:

这里写图片描述

显然,堆中任一子树也是堆。

3、推排序的基本操作

堆排序利用了大根堆(或小根堆)中堆顶记录的关键字最大(或最小),这一特性,使得在当前无序区中选取最大(最小)的记录变得简单。下面以大根堆为例说明堆排序的基本过程。

大根堆排序算法的基本操作,初始化操作是按堆的定义将数组R[1..n]调整为初始堆。每一趟排序的基本操作是,将当前无序区的堆顶记录r[1]和该区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值