介绍思路:堆 --> heapq模块创建堆 --> heapq模块方法
堆:
简要:表现形式为list(使用print打印出),堆中的元素必须相互间能够比较大小的(换句话说必须堆中元素要保证是同种类型)
堆排序:堆中的元素是有一定顺序的,分为最小堆顺序、最大堆顺序,如下介绍:
前言:无论是最小堆还是最大堆,堆的存储结构都是树状二叉堆的形式
1. 最小堆排序:
在树状二叉堆的基础上,保证父节点的值总是小于或等于子节点值,这要求把子节点上的最小值和父节点的值互相换位(如果子节点上的最小值<父节点上的值)
2. 最大堆排序:
在树状二叉堆的基础上,保证父节点的值总是大于或等于子节点值,这要求把子节点上的最小值和父节点的值互相换位(如果子节点上的最大值>父节点上的值)
图构说明请看下图:
最小堆排序图构,如下图:
heapq模块创建堆:
简要:heapq创建模块有两种方法,heapq.heappush(origin_list,item)、heapq.heapify(origin_list)。heapq模块创建的堆,其堆中的元素顺序是按照最小堆方法排序。
import heapq
heap1 = []
heap2= [10,20,30]
#方式1:
heapq.heappush(heap1,10)
heapq.heappush(heap1,20)
heapq.heappush(heap1,30)
#方式2:
heapq.heapify(heap2)
print(heap1)
print(heap2)
heapq模块方法:
增加元素:heappush(heap,item)
删除最小值元素:heappop(heap),堆中删除的元素会从子节点上移
替换最小值元素:heapreplace(heap,item)
查找n个最大值元素:heapq.heapnlargest(n,heap),返回类型为list
查找n个最小值元素:heapq.heapsmallest(n,heap),返回类型为list
高效合并有序序列:heapq.merge(*order_list),返回类型为generator
致读者:有什么意见和看法,可以评论区留言!!!