Следующий python код для реализации алгоритма сортировки кучи и функций max_heapify и build_heap приводит к следующему сообщению об ошибке:
Traceback (most recent call last):
File "heap.py", line 30, in <module>
build_heap(arr)
File "heap.py", line 25, in build_heap
for i in range(((int(len(array))-1)/2),0,-1):
TypeError: 'float' object cannot be interpreted as an integer
И код:
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)