python用heapq模块构建大根堆

python的heapq模块可以快速构建堆。只是heapq只能构建小根堆,不能构建大根堆。

import heapq
data2 = [1,5,3,2,9,5]
heapq.heapify(data2)
print(data2)
#输出:[1, 2, 3, 5, 9, 5]

大根堆的做法:

import heapq
ll=[1,4,2,3,5]
print(ll,'原始数组')
heapq.heapify(ll)
print(ll,'小根堆')
# 此时若想得到大顶堆
newl = [(-i, ll[i]) for i in range(len(ll))]
print(newl,'插入负数后的小根堆')
heapq.heapify(newl) #以插入的负数做小根堆,越大的数字插入的负数就越小,所以这样就相当于做了大根堆
# 此时已经按照第一个值变成了小顶堆,即变成了逆序
max_heap = list()
while newl:
    _, s = heapq.heappop(newl) #删除并返回 newl中的最小元素
    max_heap.append(s)
print(max_heap,'输出的大根堆')

 

你可能感兴趣的:(python3)