'int'对象不可调用的堆排序函数

时间:2019-11-25 19:13:34

标签: python heapsort

'int'对象不可调用的堆排序功能

我正在尝试创建一个返回排序列表的函数,但是却收到以下错误:“ new_value = sort_heap.deleteMin()'int'对象不可调用”

这是代码:

class MinHeap:
    def __init__(self):
        self.heap=[]


    def __str__(self):
        return f'{self.heap}'

    __repr__=__str__


    def parent(self,index):
        # -- YOUR CODE STARTS HERE

        if index>len(self) or index<=1:
            return None

        else:
            return self.heap[index//2-1]

    def leftChild(self,index):
        # -- YOUR CODE STARTS HERE

        if index<1 or 2*index>len(self):
            return None

        else:
            return self.heap[2*index-1]



    def rightChild(self,index):


        if index<1 or 2*index>len(self):
            return None

        else:
            return self.heap[2*index-1]




    def __len__(self):

        return len(self.heap)



    def insert(self,x):

        self.heap.append(x)
        current = len(self)

        while self.parent(current) is not None and self.parent(current)>x:

            self.heap[current-1], self.heap[current//2-1] = self.heap[current//2-1], self.heap[current-1]
            current = current//2



    @property 
    def deleteMin(self):
        if len(self)==0:
            return None        
        elif len(self)==1:
            out=self.heap[0]
            self.heap=[]
            return out



        deleted = self.heap[0]
        current = 1
        self.heap[0] = self.heap[len(self)-1]
        x = self.heap.pop()
        moved_value = self.heap[0]
        while self.leftChild(current) is not None:
            left=self.leftChild(current)
            right=self.rightChild(current)
            if right is not None:
                if left<=right and left<moved_value:
                    self.heap[current-1], self.heap[current*2] = self.heap[current*2], self.heap[current-1]
                    current = current *2 
                elif left>right and right<moved_value:
                    self.heap[current-1], self.heap[current*2] = self.heap[current*2], self.heap[current-1]
                    current = (current*2) + 1
                else:
                    break
            else:
                if left<moved_value:
                    self.heap[current-1], self.heap[(current*2)-1] = self.heap[(current*2)-1], self.heap[current-1]
                    current = current*2
                else:
                    break
        return deleted
def heapSort(numList):
    '''
       >>> heapSort([9,7,4,1,2,4,8,7,0,-1])
       [-1, 0, 1, 2, 4, 4, 7, 7, 8, 9]
    '''
    sort_heap = MinHeap()
    for i in range (len(numList)):
        sort_heap.insert(numList[i])
    sortedList= []
    lenght=len(numList)
    while lenght >0:
        new_value = sort_heap.deleteMin()
        sortedList.append(new_value)
        lenght -= 1

    return sortedList

MinHeap类是给定的,但我可以对其进行修改。有人可以帮忙吗?谢谢

1 个答案:

答案 0 :(得分:1)

看到您的代码(格式错误的代码,请重做格式),我看到,deleteMin@property而不是类方法。因此,您应该这样写:

new_value = sort_heap.deleteMin
#                              ^ You see, no brackets here