max_heapify 遍历堆以获取下一级节点的迭代方式

问题描述

我正在尝试编写一个迭代控制循环而不是递归,因为它更有效率有人可以告诉我我的代码是否有意义: 递归版本:

def max_heapify(array,i):

left = 2 * i
right = 2 * i + 1
length = len(array) - 1  # for termination condition check
largest = i

if left <= length and array[i] < array[left]:
  largest = left
if right <= length and array[largest] < array[right]:
  largest = right
if largest != i:
  array[i],array[largest] = array[largest],array[i]
  max_heapify(array,largest) 

迭代版本(我认为这是错误的??)

def max_heapify(array,i):

  left = 2 * i
  right = 2 * i + 1
  length = len(array) - 1  # for termination condition check
  largest = i

  if left <= length and array[i] < array[left]:
      largest = left
  if right <= length and array[largest] < array[right]:
      largest = right
  if largest != i:
      array[i],array[i]
      i= largest

我能得到关于迭代版本有什么问题的建议吗

解决方法

其实我觉得我想

def max_heapify(array,i):

left = 2 * i
right = 2 * i + 1
length = len(array) - 1  # for termination condition check
largest = i

if left <= length and array[i] < array[left]:
   largest = left
if right <= length and array[largest] < array[right]:
   largest = right
if largest != i:
   array[i],array[largest] = array[largest],array[i]
   i= largest
else:
 break