<p>我把你的分类放在适当的地方,这样做就行了。在某些地方,你返回的名单,其他地方没有那么多。你知道吗</p>
<p>修改后的<code>mergeSort</code>函数如下所示:</p>
<pre><code>def mergeSort(listNumbers,ini,end):
if ini < end:
mid=(ini+end)/2
mergeSort(listNumbers,ini,mid)
mergeSort(listNumbers,mid+1,end)
merge(listNumbers,ini,mid,end)
</code></pre>
<p>这意味着基本情况是<code>ini >= end</code>,<code>listNumbers</code>保持不变。你知道吗</p>
<p>在<code>merge</code>函数的末尾,我将<code>listNumbersT = b</code>替换为:</p>
<pre><code> for i,value in enumerate(b):
listNumbersT[ini + i] = value
</code></pre>
<p>它将<code>b</code>的元素复制回原始的<code>listNumbersT</code>。同样,这使更改“就位”在原始列表上,因此不需要返回任何内容。你知道吗</p>
<p>这使得<code>main</code>:</p>
<pre><code>def main():
l=[4,1,8,2,5,9,10]
mergeSort(l,0,len(l)-1) # sort l in-place
print l # [1, 2, 4, 5, 8, 9, 10]
</code></pre>
<hr/>
<p>一个小的调整-将<code>mergeSort</code>函数的开头改为</p>
<pre><code>def mergeSort(listNumbers,ini=0,end=-1):
if end < 0:
end += len(listNumbers)
</code></pre>
<p>在<code>main</code>中的调用变得很简单:</p>
<pre><code>mergeSort(l)
</code></pre>
<p>对于用户来说,这稍微容易一些。你知道吗</p>