以下用于实现堆排序算法以及max_heapify和build_heap函数的python代码导致以下错误消息:
追踪(最近通话):在第30行中输入文件“ heap.py”build_heap(arr)在build_heap中的文件“ heap.py”,第25行对于范围内的i(((int(len(array))-1)/ 2),0,-1):TypeError:“ float”对象无法解释为整数
def left(i):
return(2*i)
def right(i):
return(2*i+1)
def max_heapify(array,i,heap_size):
l=left(i)
r=right(i)
largest=i
if(l<=heap_size and array[l]>array[i]):
largest=l
elif(r<=heap_size and array[r]>array[i]):
largest=r
if(largest!=i):
swap(array,i,largest)
max_heapify(array,largest)
def swap(array,a,b):
array[a],array[b]=array[b],array[a]
def build_heap(array):
heap_size=len(array)-1
for i in range(((int(len(array))-1)/2),0,-1):
max_heapify(array,i,heap_size)
arr=[0,10,9,8,7,6,5,4,3,2,1,0]
build_heap(arr)
print(arr)
int(len(array) - 1) / 2
是浮点数,因为您将其除以2 之后转换为整数。只需执行(len(array) - 1) // 2
,它将给出一个整数。
这可能写在python-2.x中。如果在python-2.x中除以两个整数,则将执行整数除法。在python-3.x中,您可以使用//
(也适用于python-2.x):
def build_heap(array):
heap_size=len(array)-1
for i in range(heap_size//2,0,-1):
max_heapify(array,i,heap_size)