使用堆排序列表?蟒蛇

时间:2014-11-08 22:14:32

标签: python sorting

众所周知,Heap是计算机科学研究中的一种排序机制。所以我想到如果我们可以使用Heap将数据排序成几乎二叉树类型的形式。有没有办法可以使用Heap将列表按照基本的升序或降序排序?

我认为我们可以,但我不确定,因为Heap旨在以特定方式对数据进行排序。

但是你们觉得怎么样?你对此有什么看法?

由于

1 个答案:

答案 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()不稳定。