编辑代码

import heapq 

def sort__():
    lp=ls.copy()
    while (lp!=[]):
        print(heapq.heappop(lp),end=' ')
    print()


ls=[] #堆使用列表维护,可以创建空的列表表示空堆
ls=[3,6,8,1,2,4]  
heapq.heapify(ls) #将一个无序的列表转换为堆,时间为O(n)
sort__()

num=10
heapq.heappush(ls,num)  #将一个数插入堆中,时间为O(logn)
sort__()


heapq.heappop(ls)  #将堆中最小的元素弹出,时间为O(n) [堆调整]
#使用ls[0]获取最小元素而不弹出它
sort__()

heapq.heappushpop(ls,1) #将num插入,然后弹出最小元素。
sort__()

heapq.heapreplace(ls,0)  #先弹出最小的,在放入数据
sort__()

c1,c2,c3=[3,4,4],[2,5,99],[1,6,10] #c1,c2,c3已经被排好了。可使用merge进行多路归并。
c4=[i for i in heapq.merge(c1,c2,c3)]
print(c4)

n=3
#一下是从堆中获取最大/小的n个值。当n比较小的时候,效果很好,n越大效果约差。
#key是比较y用参数,例如key=lambda x:(x0,x2.upper(),x1),先比较第一个元素,再是第3个,第2个
a1=heapq.nlargest(n,ls,key=None)
a2=heapq.nsmallest(n,ls,key=None) 
print(a1,a2)