【发布时间】:2023-04-10 19:28:01
【问题描述】:
我为最大堆编写了这个插入函数:
def insertinmaxheap(arryhp, num):
arryhp.append(num)
arryhp.insert(0, 0)
l = len(arryhp) - 1
b = True
while b:
print(arryhp)
print(l)
print(int(l/2))
if num <= arryhp[int(l / 2)] or int(l/2) < 2:
b = False
arryhp[l] = arryhp[int(l/2)]
arryhp[int(l/2)] = num
l = int(l/2)
return arryhp[1:len(arryhp)]
我已经针对一些值进行了测试,并且大部分时间都可以正常工作,但是对于本示例,它失败了:
insertinmaxheap([50, 30, 20, 15, 10, 8, 16], 19)
输出为 [50, 19, 20, 30, 10, 8, 16, 15],如您所见,不应该存在 19。
这段代码有什么问题?
【问题讨论】:
-
至少,缩进看起来没有。
-
你是什么意思?在哪里?
-
第 2 行及以下。我不知道python,但我很确定那些应该缩进一级。
-
使用
l//2或l>>1,而不是int(l/2)。
标签: python-3.x algorithm function data-structures heap