# æå»ºæ å®ç°å class BinHeap: def __init__(self): self.heapList = [0] self.currentSize = 0 #æå ¥æ°ç»ç¹åå¿ è¦æ¶äº¤æ¢åèç¹åç¶èç¹çä½ç½®ä¿æå çæ§è´¨ def percUp(self, i): while i//2 > 0: if self.heapList[i] < self.heapList[i//2]: temp = self.heapList[i//2] self.heapList[i//2] = self.heapList[i] self.heapList[i] = temp i = i//2 # æå ¥èç¹ def insert(self, k): self.heapList.append(k) self.currentSize += 1 self.percUp(self.currentSize) # å é¤å é¡¶å ç´ å, 交æ¢å å°¾å空å é¡¶çä½ç½®å¹¶å®ç°å ç´ ç䏿² def percDown(self, i): while (i*2) <= self.currentSize: mc = self.minChild(i) if self.heapList[i] > self.heapList[mc]: temp = self.heapList[i] self.heapList[i] = self.heapList[mc] self.heapList[mc] = temp 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 return self.heapList H = BinHeap() print(H.buildHeap([9, 6, 5, 2, 3]))