翻译自Python2.7官方文档。
Heapd
Python中的heapd实现了小顶堆的功能.
heap[k]<=heap[2∗k+1]heap[k]<=heap[2∗k+2]
h
e
a
p
[
k
]
<=
h
e
a
p
[
2
∗
k
+
1
]
h
e
a
p
[
k
]
<=
h
e
a
p
[
2
∗
k
+
2
]
方法 | 描述 |
---|---|
heappush(heap, item) | 加入元素 |
heappop(heap) | 返回并删除堆顶(最小值) |
heappushpop(heap, item) | 先加入元素,再删除堆顶元素(最小值) |
heapify(x) | 将列表转换成一个小顶堆 |
heapreplace(heap, item) | 先删除堆顶元素(最小值),再加入元素 |
merge(iterables) | 合并有序列表(从小到大),返回一个迭代器 |
nlargest(n, iterable[,key] | 返回一个列表,包含最大的n个元素。相当于sorted(iterable, key=key, reverse=True)[:n] |
nsmallest(n, iterable[,key]) | 返回一个列表,包含最小的n个元素。相当于sorted(iterable, key=key)[:n] |
实例
>>> def heapsort(iterable):
... h = []
... for value in iterable:
... heappush(h, value)
... return [heappop(h) for i in range(len(h))]
...
>>> heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
延伸
可以将堆看做一个常规的Python列表,heap[0]是最小的元素,而且heap.sort()
保持堆不变