Ваша функция heapify
возвращает два объекта, поэтому вы должны использовать тот же синтаксис, который вы использовали для heap_sort
*: num_swaps, num_comps = heapify(...)
. Если вы этого не сделаете, ваша переменная num_comps
не будет обновлена внутри heap_sort
.
ОБНОВЛЕНИЕ:
Обратите внимание, что использование глобальных переменных часто не идеально. (Вы можете найти некоторое обсуждение этого здесь и здесь , например.) Обычно, если есть простой способ обойти это, вы должны избегать их, чтобы иметь меньше ошибок. prone code.
Итак, я предоставлю вам более подробное объяснение того, как исправить ваш код без использования глобальных переменных:
Во-первых, обратите внимание, что num_swaps
и num_comps
необходимо обновляться каждый раз, когда вы звоните heapify
, даже когда звоните heapify
внутри себя! Однако в исходном коде эти два счетчика обнулялись каждый раз, когда вызывался heapify
. Поэтому, чтобы они сохранили свои текущие значения, все, что вам нужно сделать, это включить их в качестве аргументов для heapify
, а затем использовать возвращенные значения для обновления исходных.
Вот пример, использующий ваши собственные код:
#notice the change to the function's arguments
def heapify(arr, len_arr, i, num_swaps, num_comps):
maxima = i
#etc...
#then every time you call heapify, pass your current num_swaps and
# num_comps then update them by setting them to the returned values:
if maxima != i:
num_swaps += 1
arr[i], arr[maxima] = arr[maxima], arr[i]
num_swaps, num_comps = heapify(arr, len_arr, maxima, num_swaps, num_comps) #notice the change to the line
return num_swaps, num_comps
Поскольку вы передаете heapify
текущие локальные значения num_swaps
и num_comps
, каждый раз, когда вы делаете num_swaps, num_comps = heapify(...,num_swaps, num_comps)
, вы будете обновлять свои локальные значения для этих переменных. .
Вы должны сделать то же самое для вызовов на heapify
внутри вашей функции heap_sort
:
def heap_sort(arr):
num_swaps = 0
num_comps = 0
len_arr = len(arr)
for i in range(len_arr, -1, -1):
num_swaps, num_comps = heapify(arr, len_arr, i, num_swaps, num_comps) #notice the change to this line
#etc....
return num_swaps, num_comps
Надеюсь, это поможет! Дайте мне знать, если это понятно.