堆排序
def find_max(arr, size):
# 从后往前遍历
# 父节点为i 子结点为2i+1 和 2i+2
for i in range(size-1, 0, -1):
# 记录父节点
parent = i//2
# 记录子节点
child = i
# 比较子节点大小
if i < size-1 and arr[i] < arr[i+1]:
child += 1
if arr[child] > arr[parent]:
# 把子节点跟父节点交换
arr[child], arr[parent] = arr[parent], arr[child]
def heap_sort(arr, size):
for i in range(size, 0, -1):
# 找到最大值
find_max(arr, i)
print(arr, '---')
# 把最大值往后放
arr[0], arr[i-1] = arr[i-1], arr[0]
print(arr, '===')
if __name__ == "__main__":
l = [3, 1, 4, 9, 6, 10, 5, 8, 2, 7]
heap_sort(l, 10)
print(l)
# [10, 3, 9, 1, 7, 4, 5, 8, 2, 6] ---
# [6, 3, 9, 1, 7, 4, 5, 8, 2, 10] ===
# [9, 6, 8, 3, 7, 4, 5, 1, 2, 10] ---
# [2, 6, 8, 3, 7, 4, 5, 1, 9, 10] ===
# [8, 2, 7, 5, 6, 4, 3, 1, 9, 10] ---
# [1, 2, 7, 5, 6, 4, 3, 8, 9, 10] ===
# [7, 1, 6, 5, 2, 4, 3, 8, 9, 10] ---
# [3, 1, 6, 5, 2, 4, 7, 8, 9, 10] ===
# [6, 3, 5, 1, 2, 4, 7, 8, 9, 10] ---
# [4, 3, 5, 1, 2, 6, 7, 8, 9, 10] ===
# [5, 4, 3, 1, 2, 6, 7, 8, 9, 10] ---
# [2, 4, 3, 1, 5, 6, 7, 8, 9, 10] ===
# [4, 2, 3, 1, 5, 6, 7, 8, 9, 10] ---
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ===
# [3, 1, 2, 4, 5, 6, 7, 8, 9, 10] ---
# [2, 1, 3, 4, 5, 6, 7, 8, 9, 10] ===
# [2, 1, 3, 4, 5, 6, 7, 8, 9, 10] ---
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ===
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ---
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ===
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
此时此刻,非我莫属
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)