#python
Вопрос:
У меня есть некоторые проблемы с моим кодом кучи, код при выполнении на 1-м месте устанавливает наибольшее число вместо того, чтобы ставить его девочкой. Вот код
class heap(object):
def __init__(self, arr = None):
self.counter = 0
if (arr == None):
self.arr = [0]*100
else:
self.arr = arr
self.count = len(self.arr)-1
def Sort(self):
self.counter = 0
for _ in range(self.count):
self.counter = 1
self.FixFromBelow()
for _ in range(self.count):
self.RemoveFromHeap()
def FixFromBelow(self):
walker = self.counter
while walker >0 and self.arr[walker] > self.arr[walker//2]:
self.arr[walker], self.arr[walker//2] = self.arr[walker//2], self.arr[walker]
walker //=2
def FixFromAbove(self):
walker = 1
while True:
the_greatest = walker
if(2*walker <= self.counter and self.arr[2*walker]>self.arr[the_greatest]):
the_greatest = 2*walker
if(2*walker 1 <= self.counter and self.arr[2*walker 1]>self.arr[the_greatest]):
the_greatest = 2*walker 1
if(the_greatest == walker):
break
self.arr[walker], self.arr[the_greatest] = self.arr[the_greatest], self.arr[walker]
walker = the_greatest
def AddToHeap(self,num):
self.counter =1
self.arr[self.counter]=num
self.FixFromBelow()
def RemoveFromHeap(self):
self.arr[1], self.arr[self.counter] = self.arr[self.counter], self.arr[1]
self.counter -=1
self.FixFromAbove()
return self.arr[self.counter 1]
До
2, 16, 16, 18, 10, 17, 6, 9, 14, 8, 1, 17, 1, 18, 18,
И после выполнения кода
18, 1, 1, 2, 6, 8, 9, 10, 14, 16, 16, 17, 17, 18, 18,
Комментарии:
1. Когда вы запускаете это с помощью отладчика, что первое , что он делает неправильно?