堆排序(Python实现)
堆排序
此算法特性
此算法适用场景
代码实现
def percDown(arr,start_node,end_node): # 堆下沉函数
root_node = start_node
child_node = root_node*2 + 1 # 左子节点
while child_node <= end_node:
if child_node + 1 <=end_node and arr[child_node+1] > arr[child_node]: # 如果右子节点大于左子节点.父节点往比较到大的子节点进行下沉
child_node = child_node + 1
if arr[child_node] > arr[root_node]:
arr[root_node],arr[child_node] = arr[child_node],arr[root_node]
root_node = child_node
child_node = child_node + 1
else:
break
def heap_sort(arr): # 堆排序
father_node_last = len(arr)// 2 - 1 # 最后一个父节点
for father_node_now in range(father_node_last,-1,-1): # 从最后一个父节点开始,到根节点.依次进行下沉.
percDown(arr,father_node_now,len(arr)-1)
for end_node in range(len(arr)-1,0,-1): # 截至条件是end_node>0
arr[0],arr[end_node] = arr[end_node],arr[0] # 根节点与最后一个节点交换元素
percDown(arr,0,end_node-1) # 重新进行下沉.此时是arr[0]需要进行下沉.
return arr
l=[22,3,5,7,23,11]
l = [22,3]
print(heap_sort(l))
参考
分类:
数据结构与算法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)