我正在編寫一個O(n)算法的'heapifying'在Python中的列表。我不明白爲什麼它不起作用。heapify O(n)算法
def func(l):
size=len(l)
for root in range((size//2)-1,-1,-1):
child = 2*root+1 #parent of child is target
while(child<size):
#l[child] should be smaller sibling
if child<size-1 and l[child]>l[child+1]:
child+=1
#can we put l[root] in l[child//2]?
if l[root]<=l[child]:
break #yes
#no
l[child//2]=l[child]#move child up
child=2*child+1#move down a level
l[child//2]=l[root]
return l
小號要根的孩子在正確的位置。 2 * root和2 * root + 1? –
@MicahSmith:如果這些索引是基於零的,就像在Python中一樣。 'root'的孩子是'2 * root + 1'和'2 * root + 2'。 – Blckknght
@Blckknght聽起來不錯。在我的DS課程中,我們學會了將root放入索引1並將索引0留空。 (要同時允許以上模式並在heapify期間用作佔位符。) –