6.2-1
27,17,3,16,13,10,1,5,7,12,4,8,9,0
27,17,10,16,13,3,1,5,7,12,4,8,9,0
27,17,10,16,13,9,1,5,7,12,4,8,3,0
6.2-2
就是找到自身和左右孩子里最小的值交换即可。
def min_heapify(A,i):
l=left(i)
r=right(i)
if l<= A.heap_size and A[l] <A[i]:
small=l
else : small=i
if r<= A.heap_size and A[r]<A[small]:
small=r
if small != i:
exchange A[i] with A[small]
min_heapify(A,small)
运行时间相同。
6.2-3
不会有任何操作。
6.2-4
此时,它是叶子节点,没有左右孩子,所以调用不会进行任何操作。
6.2-5
这里改一下维持小根堆的代码
def min_heapify(A,i):
while True:
l=left(i)
r=right(i)
if l<= A.heap_size and A[l] <A[i]:
small=l
else : small=i
if r<= A.heap_size and A[r]<A[small]:
small=r
if small == i:
return
exchange A[i] with A[small]
i=small