堆排序
1 import random 2 3 4 def sift(li, low, high): 5 if low < high: 6 i = low 7 j = 2 * i + 1 8 temp = li[low] 9 while j <= high: 10 if j+1 <= high and li[j+1] > li[j]: 11 j += 1 12 if temp < li[j]: 13 li[i] = li[j] 14 i = j 15 j = 2 * i + 1 16 else: 17 break 18 li[i] = temp 19 20 21 def heap_sort(li): 22 # 1.建立堆 23 # 2,堆头放到堆尾 24 tail = len(li) - 1 25 header = 0 26 last_fa = (tail-1) // 2 27 for i in range(last_fa, -1, -1): 28 sift(li, i, tail) 29 for i in range(len(li)): 30 li[header], li[tail] = li[tail], li[header] 31 tail -= 1 32 sift(li, 0, tail) 33 34 35 def sift_desc(li, low, high): 36 i = low 37 j = 2 * i + 1 38 temp = li[low] 39 while j <= high: 40 if j+1 <= high and li[j+1] < li[j]: 41 j += 1 42 if temp > li[j]: 43 li[i] = li[j] 44 i = j 45 j = 2 * i + 1 46 else: 47 break 48 li[i] = temp 49 50 51 # 前k个元素 52 def topk(li, k): 53 heap = li[:k] 54 tail = k - 1 55 last_fa_k = (tail-1) // 2 56 for i in range(last_fa_k, -1, -1): 57 sift_desc(heap, i, tail) 58 print(heap) 59 for i in range(tail+1, len(li), 1): 60 if li[i] > heap[0]: 61 heap[0] = li[i] 62 sift_desc(heap, 0, tail) 63 for i in range(tail, -1, -1): 64 heap[0], heap[i] = heap[i], heap[0] 65 sift_desc(heap, 0, i-1) 66 print(heap) 67 68 69 if __name__ == '__main__': 70 li = [i for i in range(200)] 71 random.shuffle(li) 72 print(li) 73 topk(li, 10) 74 # heap_sort(li) 75 print(li)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人