python achieve binary heap heap big top

class BigPq (Object):
     DEF  the __init__ (Self, ARR: List): 
        self.arr = ARR 
        self.mark =. 1
         the while self.mark ==. 1 : 
            self.build () 

    DEF Build (Self): 
        self.mark = 0 # first set to zero, as long as after a swap function, it is set again. 1 
        index = len (self.arr) -. 1
         for I in Range (index):
             IF I 2 + 2 * <= index:   # if left and right sub node exists, to compare their size 
                self.tri (I, I *. 1 + 2, 2 + 2 * I )
             elif i * 2 + 1 <= index:  # 如果只有左子节点存在,去比较他们的大小
                if self.arr[i] < self.arr[i * 2 + 1]:
                    self.swap(i, i * 2 + 1)
            else:
                break

    def tri(self, head: int, left: int, right: int):
        if self.arr[head] < self.arr[left]:
            self.swap(head, left)
        if self.arr[head] < self.arr[right]:
            self.swap(head, right)

    def swap(self, index_1: int, index_2: int):
        self.mark = 1
        temp = self.arr[index_2]
        self.arr[index_2] = self.arr[index_1]
        self.arr[index_1] = temp

    def show(self):
        print(self.arr)

    def pop(self) -> int:
        self.arr[0] = self.arr[-1]
        temp = self.arr.pop()
        self.mark = 1
        while self.mark == 1:
            self.build()
        return temp

    def push(self, value: int):
        self.arr.append(value)
        self.mark = 1
        while self.mark == 1:
            self.build()

Guess you like

Origin www.cnblogs.com/jiaxiaoxin/p/10960179.html