2016-06-11 22 views
0

例如,隨機數的列表:python如何在堆中排序值?

>>> x = [1,24,5,1,5,1,23,6] 
>>> heapq.heapify(x) 
[1, 1, 1, 6, 5, 5, 23, 24] 

爲什麼它任意做6,5,5而不是5,5,6或5,6,5-?

回答

2

Python文檔包含的heapq如下描述:

堆是二叉樹針對每個父節點具有小於或等於它的任何的兒童的值。此實現使用所有k爲其中的heap[k] <= heap[2*k+1]heap[k] <= heap[2*k+2]的數組,計數從零開始的元素。爲了比較,不存在的元素被認爲是無限的。堆的有趣屬性是它的最小元素始終是根,heap[0]

您可以使用示例數據驗證這一點:

>>> for i in xrange(len(x)): 
...  print '{0} <= {1}'.format(x[i], x[i*2+1:i*2+3]) 
... 
1 <= [1, 1] 
1 <= [6, 5] 
1 <= [5, 23] 
6 <= [24] 
5 <= [] 
5 <= [] 
23 <= [] 
24 <= [] 

有關二叉堆可以檢查Wikipedia更多的信息。