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
相关文章
|
5月前
|
搜索推荐 Python
Python基础编程:冒泡排序和选择排序的另一种while循环实现
这篇文章介绍了Python中冒泡排序和选择排序的实现,提供了使用while循环的替代方法,并展示了排序算法的运行结果。
41 2
Python基础编程:冒泡排序和选择排序的另一种while循环实现
|
7月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
141 7
|
7月前
|
搜索推荐 算法 大数据
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
|
存储 算法 索引
【查找算法】6种常见的查找算法简述及Python代码实现
【查找算法】6种常见的查找算法简述及Python代码实现
|
8月前
|
算法 搜索推荐 Python
Python 数据结构和算法:如何实现快速排序和归并排序?
Python 数据结构和算法:如何实现快速排序和归并排序?
53 1
|
8月前
|
搜索推荐 算法
常见排序算法以及冒泡排序的基础使用方法
常见排序算法以及冒泡排序的基础使用方法
51 0
|
存储 算法 Java
【算法练习】有趣的括号匹配问题(思路+ 图解 +优化)基于java实现
1.题目描述 小洛看着一堆只包含’(‘和’)‘的括号序列犯愁了,小洛想知道这串序列里最长正确匹配的序列长度是多少,你能帮帮小洛吗?
【算法练习】有趣的括号匹配问题(思路+ 图解 +优化)基于java实现
|
人工智能 搜索推荐 算法
几种基础排序算法的python实现
几种基础排序算法的python实现
95 0
|
算法 C语言
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)
08【C语言 & 趣味算法】再识:冒泡排序(问题分析、算法设计与分析、程序流程图以及完整代码)

热门文章

最新文章