class BinHeap: def __init__(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] self.heapList[i] = self.heapList[i//2] self.heapList[i//2] = tmp i = i//2 def insert(self,k): self.heapList.append(k) self.currentSize = self.currentSize + 1 self.perUp(self.currentSize) 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 perDown(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 delMin(self): retval = self.heapList[1] self.heapList[1] = self.heapList[self.currentSize] self.currentSize = self.currentSize - 1 self.heapList.pop() self.perDown(1) return retval def buildHeap(self,alist): i = len(alist)//2 self.currentSize = len(alist) self.heapList = [0] + alist[:] while(i > 0): self.perDown(i) i = i - 1
原文:http://my.oschina.net/stevenKelly/blog/391758