defheapify(self, root): if root > self.size(): return left_node = self.left_child(root) right_node = self.right_child(root) largest = root if left_node <= self.size(): if self.data_list[left_node] > self.data_list[largest]: largest = left_node
if right_node <= self.size(): if self.data_list[right_node] > self.data_list[largest]: largest = right_node
if largest != root: self.data_list[root], self.data_list[largest] = self.data_list[largest], self.data_list[root] self.heapify(largest)
defbuild_heap(self): for i inrange(self.size() // 2, 0, -1): self.heapify(i)
defget_max(self): if self.size() == 0: returnNone ret = self.data_list[1] self.data_list[1] = self.data_list[-1] del self.data_list[-1] self.heapify(1) return ret
definsert(self, data): self.data_list.append(data) now_index = self.size() pre = self.father(now_index) while now_index != 1and self.data_list[pre] < data: self.data_list[pre], self.data_list[now_index] = self.data_list[now_index], self.data_list[pre] now_index = pre pre = now_index // 2