擅长:python、mysql、java
<p>当前发布的答案准确地描述了为什么会出现越界错误,但是如果只使用<code>heap_size-1</code>调用<code>bubble_up()</code>,它将无法正确维护堆。请注意<code>bubble_up()</code>中代码的以下部分:</p>
<pre><code>while i // 2 > 0:
</code></pre>
<p>当前的while循环语句不会将堆根的立即子级与根级的子级进行比较。假设您插入<code>3</code>,然后插入<code>1</code>。当您插入<code>1</code>时,<code>bubble_up()</code>将不能正确地将插入的1与3交换,因为它不会在while语句中运行swap例程,因为<code>i//2 == 0</code>是插入到<code>1</code>的位置。我会把这个街区换成:</p>
^{pr2}$