Python编程:heapq模块堆排序

简介: 堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。整个堆的最小元素总是位于二叉树的根节点。python的heapq模块提供了对堆的支持。堆数据结构最重要的特征是heap[0]永远是最小的元素

堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。

整个堆的最小元素总是位于二叉树的根节点。

python的heapq模块提供了对堆的支持。

堆数据结构最重要的特征是heap[0]永远是最小的元素


代码示例

import heapq
# 添加元素,容器是list列表,元素存放顺序是小根堆的顺序
h = []
heapq.heappush(h, 2)
heapq.heappush(h, 3)
h
Out[6]: 
[2, 3]
# 列表转换为堆
lst = [2, 3, 4, 6, 9, 1, 5]
heapq.heapify(lst)
lst
Out[9]: 
[1, 3, 2, 6, 9, 4, 5]
# 弹出最小值
heapq.heappop(lst)
Out[10]: 
1
lst
Out[11]: 
[2, 3, 4, 6, 9, 5]
# 弹出最小值,添加新元素
heapq.heapreplace(lst, 8)
Out[14]: 
2
lst
Out[15]: 
[3, 6, 4, 8, 9, 5]
# 和根元素比较,如果比其大则替换
heapq.heappushpop(lst, 4)
Out[16]: 
3
lst
Out[17]: 
[4, 6, 4, 8, 9, 5]
# 和根元素比较,如果比其小则不替换
heapq.heappushpop(lst, 3)
Out[18]: 
3
lst
Out[19]: 
[4, 6, 4, 8, 9, 5]
# 合并堆
h = [10, 11, 13]
l = heapq.merge(lst, h)
list(l)
Out[25]: 
[4, 6, 4, 8, 9, 5, 10, 11, 13]
# 查询最大的n个元素
heapq.nlargest(3, lst)
Out[26]: 
[9, 8, 6]
# 查询最小的n个元素
heapq.nsmallest(3, lst)
Out[27]: 
[4, 4, 5]

参考

  1. python3入门之堆(heapq)
  2. Python标准库模块之heapq
相关文章
|
4月前
|
搜索推荐 Python
Python基础编程:冒泡排序和选择排序的另一种while循环实现
这篇文章介绍了Python中冒泡排序和选择排序的实现,提供了使用while循环的替代方法,并展示了排序算法的运行结果。
34 2
Python基础编程:冒泡排序和选择排序的另一种while循环实现
|
4月前
|
存储 算法 搜索推荐
【初阶数据结构篇】冒泡排序和快速排序(中篇)
与直接插入排序法相比,比较次数一致,但冒泡排序的交换需要执行三次,而直接插入排序因为使用了tmp临时变量存储要插入的数据,只用执行一次,所以直接插入排序法效率明显更高。
36 1
|
5月前
|
算法 索引 Python
Python算法设计与分析大揭秘:分治法、贪心算法、动态规划...掌握它们,让你的编程之路更加顺畅!
【7月更文挑战第8天】探索Python中的三大算法:分治(如快速排序)、贪心(活动选择)和动态规划(0-1背包问题)。分治法将问题分解求解再合并;贪心策略逐步求局部最优;动态规划通过记忆子问题解避免重复计算。掌握这些算法,提升编程效率与解决问题能力。
49 1
|
6月前
|
搜索推荐 算法 数据挖掘
十大排序算法详解-上篇:比较排序算法【python 动态图解】
十大排序算法详解-上篇:比较排序算法【python 动态图解】
|
7月前
|
算法 搜索推荐
数据结构与算法⑫(第四章_中_续一)堆排序(详解)
数据结构与算法⑫(第四章_中_续一)堆排序(详解)
44 0
|
存储 算法 索引
【查找算法】6种常见的查找算法简述及Python代码实现
【查找算法】6种常见的查找算法简述及Python代码实现
|
7月前
|
算法 数据处理 Python
【Python数据结构与算法】--- 递归算法应用-五行代码速解汉诺塔问题.
【Python数据结构与算法】--- 递归算法应用-五行代码速解汉诺塔问题.
36 0
|
搜索推荐 算法 C语言
【数据结构】—从冒泡排序丝滑过度快速排序(含C语言实现)
【数据结构】—从冒泡排序丝滑过度快速排序(含C语言实现)
【数据结构】—从冒泡排序丝滑过度快速排序(含C语言实现)
|
人工智能 搜索推荐 算法
几种基础排序算法的python实现
几种基础排序算法的python实现
91 0
|
算法 搜索推荐 Python
Python数据结构与算法(13)---选择排序
Python数据结构与算法(13)---选择排序
123 1
Python数据结构与算法(13)---选择排序