<p>我很好奇为什么不直接使用Python内置的排序工具,根据您的需要,<code>sort</code>或{<cd2>}。它可能比你自己滚动的东西更有效率(除非你在数据集上使用特定的额外信息,这里似乎不是这样)。你这样做可能是出于教育目的,在这种情况下,你可以随意忽略这段话,但如果你只是想整理一些数据,我就不提内置的东西了。在</p>
<p>在任何情况下,您的具体问题似乎是如何“声明输入数组a大小的数组温度”。在</p>
<p>这句话很容易做到:</p>
<pre><code>temp = [0] * len(a)
</code></pre>
<p>以下文字说明:</p>
^{pr2}$
<hr/>
<p>你现在拥有的是:</p>
<pre><code>temp = []
</code></pre>
<p>这将创建一个大小为零的列表,后跟:</p>
<pre><code>temp[k] = a[i]
</code></pre>
<p>这总是会引起一个问题,因为没有值<code>k</code>来处理它。在</p>
<hr/>
<p>除此之外,实际的合并还存在缺陷,因为您使用了不正确的变量来处理数组。您已经在逻辑上将某些项绑定在一起,例如将<code>i</code>与第一个数组节绑定在一起,<code>j</code>与第二个数组节绑定在一起,但随后又违反了这一点:</p>
<pre><code>while ( i <= u2 ): # i and u1 should be associated: while i <= u1:
temp[k] = a[i] # (no need for '()' in Python conditions by the way).
k = k + 1
i = i + 1
while ( j <= u2 ):
temp[k] = a[j]
k = k + 1
i = i + 1 # j and u2 should be associated: j = j + 1
</code></pre>
<p>即使修复了数组创建,上面的第二个循环也可能会导致问题。它将永远运行(或直到异常,以先到者为准),因为您正在检查<code>j</code>,但从不更改它。但是,上述两项均不正确,因此应予以修正。在</p>
<p>一旦我使数组的大小正确,进行这两个更改,并在排序之前和之后打印出数组,它看起来会更好一些:</p>
<pre><code>[8, 5, 7, 1, 9, 3]
[1, 3, 5, 7, 8, 9]
</code></pre>