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
            </div>
目录
相关文章
|
4月前
|
搜索推荐 算法 Python
Python教程:使用Python实现冒泡排序和快速排序
排序算法根据其实现原理和效率可以分为多种类型,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。这些算法在不同的场景下具有不同的优劣势,需要根据实际需求选择合适的算法。
52 3
|
5月前
|
算法 搜索推荐 Python
Python 数据结构和算法:如何实现快速排序和归并排序?
Python 数据结构和算法:如何实现快速排序和归并排序?
41 1
|
人工智能 搜索推荐 算法
几种基础排序算法的python实现
几种基础排序算法的python实现
79 0
|
算法 Python
Python一段代码带你轻松弄懂快速排序
Python一段代码带你轻松弄懂快速排序
|
算法 搜索推荐 Python
Python数据结构与算法(13)---选择排序
Python数据结构与算法(13)---选择排序
114 1
Python数据结构与算法(13)---选择排序
|
算法 搜索推荐 索引