当我运行它时,没有任何显示,甚至没有错误消息。所以,我想知道这有什么问题,以及如何正确调用这些函数。(我猜这个函数调用时出错了)
class BinHeap:
def makeheap(self):
self.heapList=[0];
self.currentSize=0;
def perUp(self,i):
while i // 2 > 0:
if self.heapList[i]<self.heapList[i//2]:
tmp=self.heapList[i//2]
self.heapList[i//2]=self.heapList[i]
self.heapList[i]=tmp
i = i // 2
def insert(self,k):
self.heapList.append(k)
self.currentSize = self.currentSize+1
self.perUp(self.currentSize)
def percDown(self,i):
while (i * 2) <= self.currentSize:
mc = self.minChild(i)
if self.heapList[i] > self.heapList[mc]:
tmp = self.heapList[i]
self.heapList[i] = self.heapList[mc]
self.heapList[mc] = tmp
i = mc
def minChild(self,i):
if i * 2 + 1 > self.currentSize:
return i * 2
else:
if self.heapList[i*2] < self.heapList[i*2+1]:
return i * 2
else:
return i * 2 + 1
def delMin(self):
retval = self.heapList[1]
self.heapList[1] = self.heapList[self.currentSize]
self.currentSize = self.currentSize - 1
self.heapList.pop()
self.percDown(1)
return retval
def buildHeap(self,alist):
i = len(alist) // 2
self.currentSize = len(alist)
self.heapList = [0] + alist[:]
while (i > 0):
self.percDown(i)
i = i - 1
bh=BinHeap()
bh.buildHeap([9,5,6,2,3])
print("BinHeap")
print(bh.delMin())
print(bh.delMin())
print(bh.delMin())
print(bh.delMin())
print(bh.delMin())
答案 0 :(得分:0)
Python非常讲究间距。你搞砸了空格/格式。编辑你的代码,使最后几行在它前面没有空格/标签,你至少应该得到一两个错误。
# This is a subroutine to be executed when called
def buildHeap(self, alist):
i = len(alist) // 2
self.currentSize = len(alist)
self.heapList = [0] + alist[:]
while (i > 0):
self.percDown(i)
i = i - 1
# these are commands to be executed now
bh = BinHeap()
bh.buildHeap([9,5,6,2,3])
print(bh.delMin())
print(bh.delMin())
print(bh.delMin())
print(bh.delMin())
print(bh.delMin())