##堆排序(大根堆)
#向下调整函数
def sift(list,low,high):
'''
:param li: 列表
:param low: 堆的根节点
:param high: 堆的最后一个元素的位置
:return:
'''
i =low #最开始指向根节点
j=2*i+1 #开始指向i的左孩子节点
tmp =list[low] #把堆顶存起来
while j<=high: #j位置有数时一直循环
if j+1<=high and list[j]<list[j+1]:
j=j+1 #指向i的右孩子节点
if list[j]>tmp:
list[i]=list[j]
i=j #接着看下一层
j=2*i+1
else: #tmp大于孩子节点
list[i]=tmp #把tmp放在某一级根节点的位置
break
else: #当i在最后一层时,j越界,i已经没有孩子节点
list[i]=tmp #把tmp放到i的位置上(叶子结点)
#堆排序函数
def heap_sort(list):
n=len(list)
#开始构建堆
for i in range((n-2)//2,-1,-1):
#从最后一个叶子节点的父节点开始调整,i表示一次调整的根节点的下标
sift(list,i,n-1)
#构建堆结束
for high in range(n-1,-1,-1):
#m一直指向堆的最后一个元素
list[0],list[high]=list[high],list[0]
sift(list,0,high-1) #high-1是一次出数后新的high
li=[i for i in range(20)]
import random
random.shuffle(li)
print(li)
heap_sort(li)
print(li)
没有合适的资源?快使用搜索试试~ 我知道了~
Python从零开始学算法代码(1-9篇)
共13个文件
py:13个
需积分: 0 0 下载量 171 浏览量
2023-11-29
21:38:07
上传
评论
收藏 5KB ZIP 举报
温馨提示
目前专栏已经更新了10篇,这里是前面有关算法的代码文件,包括递归算法、两个查找算法,以及6+4十个排序算法,都是可直接运行的。希望我的文章能帮助大家更好的学习python算法,让大家都能从这里学到一些东西,如有问题希望等提出来一起讨论。
资源推荐
资源详情
资源评论
收起资源包目录
python从零开始学算法代码(1—9).zip (13个子文件)
重要排序——堆排序.py 1KB
其他排序——计数排序.py 253B
简单排序——冒泡排序.py 352B
重要排序——快速排序.py 460B
列表查找——顺序查找.py 247B
其他排序——桶排序.py 588B
简单排序——插入排序.py 627B
递归——汉诺塔问题.py 275B
其他排序——基数排序.py 397B
简单排序——选择排序.py 320B
列表查找——二分查找.py 447B
重要排序——归并排序.py 959B
其他排序——希尔排序.py 682B
共 13 条
- 1
资源评论
快快飞
- 粉丝: 113
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 简单的Linux C代码,实现链表功能
- 汇编语言探索之旅:从基础到实践,解锁底层奥秘-markdown材料.zip
- Fortran语言:经典与现代交织的编程之旅-markdown材料.zip
- 基于python编写的appium自动化框架,采用PO模式,并集成了日志以及测试报告通过邮件发送的功能
- csdn.apk
- spleeter模型下载
- 微信小程序 - 图书管理系统源码.zip
- 微信小程序 - 图片自适应 ,富文本解析源码.zip
- 微信小程序 - 同乐居商城:购物车合算源码
- 1、根据输入的三条边值判断能组成何种三角形,并设计测试数据进行判定覆盖测试 三条边为变量a、b、c,范围为1≤边值≤10,不在范
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功