堆是一个近似完全二叉树的结构,并同时满足如下性质
子节点的键值或索引总是小于(或者大于)它的父节点
python标准库模块heapq实现了堆排序的一些算法,主要提供了以下几个函数
heapify(x):本地把列表转换为堆,时间复杂度O(n)heappush(heap, item):将新项添加到堆,并保持堆的不变性heappop(heap):从堆中取出最小项,并保持堆的不变性heapreplace(heap, item):从堆中取出最小项,并将新项添加到堆,并保持堆的不变性heappushpop(heap, item):从堆中取出最小项,并将新项添加到堆,并保持堆的不变性(速度更快)nsmallest(n, iterable, key=None):从可迭代对象中返回前n个最小项nlargest(n, iterable, key=None):从可迭代对象中返回前n个最大项merge(*iterables, key=None, reverse=False):合并多个可排序对象