算法:堆排序

本文详细介绍了堆排序算法的基本概念、大小堆的区别,并通过步骤解析了如何将列表转化为堆并进行heapify操作,以及堆排序的具体过程。通过示例展示了从大顶堆的构建到排序的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、基本概念

二、大小堆

三、堆实现heapify

1、把列表转化为堆 【大项堆】

 2、对堆做 heapify

2.1  树的第四层子节点,和父节点,第三层层进行大项堆比较,【红色的是比较交换后的数字】​编辑        

2.2  树的第三层子节点,和父节点,第二层进行大项堆比较,【绿色的是比较交换后的数字】 

​2.3 树的第二层子节点,和父节点,第一层进行大项堆比较,【换色色的是比较交换后的数字】 ​编辑

2.4 代码来实现

 3、对堆进行排序

3.1 最后的节点和根节点做交换【5,50做交换】,砍掉最后的节点

3.3 、在对节点做heapify,之后,根节点在和最后的最后的节点,做交换【48,5】,砍掉最后的节点

 3.3 、以此类推,根节点在和最后的最后的节点,做交换【47,5】,砍掉最后的节点,其他的节点也是这样实现,就不一一列举了

3.4 代码实现这部分排序

 四、完整代码

一、基本概念

首要需要理解的堆是由树组成,一种叫做完全二叉树的数据结构。

二、大小堆

大顶堆:每个节点的值都大于或者等于它的左右子节点的值。

小顶堆:每个节点的值都小于或者等于它的左右子节点的值。
可以得到的排序排序的列表
 

对于大顶堆:arr[i] >= arr[2i + 1] && arr[i] >= arr[2i + 2]

对于小顶堆:arr[i] <= arr[2i + 1] && arr[i] <= arr[2i + 2]

三、堆实现heapify

1、把列表转化为堆 【大项堆】

listF = [4, 48, 3, 50, 4, 47, 5, 38, 15, 46, 19, 44, 27, 26, 36]

parent_node = (i -1) /2   # i 代表再树中索引的位置  
lef_node = 2 * i +1  
ritht_node = 2 * 1 +2

 2、对堆做 heapify

        2.1  树的第四层子节点,和父节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值