为什么堆排序算法中的build_heap函数不执行

问题描述 投票:0回答:1

以下用于实现堆排序算法以及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)


python-3.x algorithm sorting heap heapsort
1个回答
0
投票

int(len(array) - 1) / 2是浮点数,因为您将其除以2 之后转换为整数。只需执行(len(array) - 1) // 2,它将给出一个整数。


0
投票

这可能写在中。如果在中除以两个整数,则将执行整数除法。在中,您可以使用//(也适用于):

def build_heap(array):
    heap_size=len(array)-1
    for i in range(heap_size//2,0,-1):
        max_heapify(array,i,heap_size)
© www.soinside.com 2019 - 2024. All rights reserved.