众所周知,Heap是计算机科学研究中的一种排序机制。所以我想到如果我们可以使用Heap将数据排序成几乎二叉树类型的形式。有没有办法可以使用Heap将列表按照基本的升序或降序排序?
我认为我们可以,但我不确定,因为Heap旨在以特定方式对数据进行排序。
但是你们觉得怎么样?你对此有什么看法?
由于
答案 0 :(得分:2)
是的,您可以使用堆来对值进行排序;只需从堆中弹出元素直到堆为空;它们将按排序顺序返回:
from heapq import heappush, heappop
def heapsort(iterable):
h = []
for value in iterable:
heappush(h, value)
return [heappop(h) for i in range(len(h))]
那是因为heapq.heappop()
维持堆不变。
请注意,这不仅仅是效率,而是直接对列表进行排序。此外,用于内置sorted()
函数的TimSort算法是 stable ;排序中具有相同值的元素保持相同的顺序。另一方面,heapsort()
不稳定。