堆排序python
堆排序(Heapsort)是利用二叉堆的概念来排序:
# 堆的向下调整函数(大根堆)
def sift(li, low, high): """li:列表,low:堆的根节点位置,high:堆的最后一个元素的位置""" i = low # i 最开始指向根节点 j = 2 * i + 1 # j开始是左孩子 tmp = li[low] # 把堆顶存起来 while j <= high: # 只要j位置有数 if j + 1 <= high and li[j+1] > li[j]: # 如果右孩子有并且比较大 j = j + 1 # j指向右孩子 if li[j] > tmp: # 左孩子比较大 li[i] = li[j] # 把左孩子的值放到父节点 i = j # 往下看一层 j = 2 * i + 1 else: # tmp更大,把tmp放到i的位置上 li[i] = tmp # 把tmp放到某一级位置上 break else: # 把tmp放到叶子节点 li[i] = tmp
堆排序:
def heap_sort(li): n = len(li) # n是列表的长度 for i in range((n-2)//2, -1, -1): # i表示建堆的时候调整部分的根的下标 sift(li, i, n-1) # high 始终指向最后一个位置n-1,保证不越界即可 # 建堆完成 for i in range(n-1, -1, -1): # i 指向当前堆的最后一个元素 li[0],li[i] = li[i],li[0] # 交换最后一个元素和第一个元素后,high还是指向最后一个元素的位置 sift(li, 0, i-1) # 注意,i要减一,因为新调整的堆不包括最后一个位置了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」