擅长:python、mysql、java
<p>使用sentinel值(float('inf')时存在问题。考虑已经到达多个运行结束时的情况,例如当FixSyqQList[i]=SeCyqQList[j]=浮点(“IF”),在这种情况下,FrestyQqList[I]中的浮点(“IF”)被复制到LST[K],并且<EM> I EME>递增超过FixtQqList[]结尾。<p>
<p>每次复制元素时,代码都需要检查是否到达运行的末尾,如果是,则下拉到剩余运行的3路合并。稍后将下降到双向合并,最后是剩余一次运行的其余部分的副本</p>
<P>代码可以被改进,考虑到TieldQuyList[]或LaSTiqqLST[]具有最小元素的情况,得到6个比较以得到这些情况。通过使用嵌套的if+else,可以将任何路径上的比较减少到3次,以确定哪个运行具有最小的元素。3路合并查找a、b、c中最小值的示例,对于3种可能情况中的任何一种,仅进行2次比较:</p>
<pre><code> if(a <= b)
if(a <= c)
a is smallest
else
c is smallest
else
if(b <= c)
b is smallest
else
c is smallest
</code></pre>
<hr/>
<p>链接到4路自顶向下混合合并排序+插入排序(用于小规模运行)的java示例。我没有费心把它移植到Python上,因为Python太慢了,而且由于Python是一种解释性语言,4路合并排序在Python中可能比2路慢(在编译语言中,4路比2路快15%)</p>
<p><a href="https://stackoverflow.com/questions/55840901/55842481#55842481">How can I implement the Merge Sort algorithm with 4-way partition without the error ArrayIndexOutOfBoundsException?</a></p>