堆排序
步骤
- 建堆
- 挨个出数
代码
# 调整函数 def shift(lst, low, high): i = low j = 2 * i + 1 # 出来到数 tmp = lst[low] # 只要有数 while j <= high: # 如果右边孩子存在并且比较大 if j + 1 <= high and lst[j + 1] > lst[j]: # 切换到右边 j += 1 # 如果当前到数大于出来到数 if lst[j] > tmp: # 当前到数放到上面去 lst[i] = lst[j] # 往下层走,再循环去比较 i = j j = 2 * i + 1 else: # 出来到数找到了合适到位置 i break # 把出来到数在空位上 lst[i] = tmp def heap_sort(lst): # 建堆 n = len(lst) for i in range(n // 2 - 1, -1, -1): shift(lst, i, n - 1) # print(lst) # 挨个出数 for i in range(n - 1, -1, -1): lst[0], lst[i] = lst[i], lst[0] shift(lst, 0, i - 1) print(lst) lst = [i for i in range(100)] heap_sort(lst)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义