python学习笔记--堆(heap)

1.heapq模块

heapq模块中提供了一系列的堆(默认小根堆)操作,下面给出一些常用的方法:

nums=[20, 38, 100, 50, 94, 22, 35, 38, 0, 80, 90, 69, 37]

heap=[] # 建立空堆 由于堆是一个完全二叉树,完全二叉树的结点编号与列表下标存在一一对应的关系,因此本质上是一个列表
for i in range(len(nums)):
    heapq.heappush(heap,nums[i]) # 向堆中插入元素
print(heap) # [0, 20, 22, 38, 80, 37, 35, 50, 38, 94, 90, 100, 69]
print(heap[0]) # 0 堆顶元素
print(heapq.heappop(heap)) # 0 堆顶元素弹出
heapq.heappushpop(heap,999) # 弹出堆顶元素,同时向heap中插入新的元素,较分开完成(heappop+heappush)更为高效
print(heap) # [22, 38, 35, 38, 80, 37, 999, 50, 69, 94, 90, 100]
heapq.heapify(nums) # 将列表调整为堆 时间复杂度O(n)
print(nums) # [0, 20, 22, 38, 80, 37, 35, 38, 50, 94, 90, 69, 100]


2.堆排序算法

利用heapq中的一些方法,可以很容易地完成堆排序:

def heapsort(seq):
    res=[]
    heap = list(seq)
    heapq.heapify(heap)
    while len(heap) != 0:
   
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值