无法推断为什么代码在简单的 while 循环中没有按预期运行

Unable to reason why the code is not behaving as expected in a simple while loop

我正在尝试在 python 中实现合并排序算法。我正在粘贴代码(带有用于跟踪流程的打印件)和相同的输出。如您所见,在最终合并操作之前一切正常。

def mergesort(alist):
if(len(alist) == 1):
    return alist
else:
    mid = len(alist)/2
    leftHalf = mergesort(alist[:mid])
    rightHalf = mergesort(alist[mid:])

    i, j, k = 0, 0, 0 #i= leftHalf counter, j= rightHalf counter, k= alist counter

    while i < len(leftHalf) and j < len(rightHalf):
        if(leftHalf[i] < rightHalf[j]):
            alist[k] = leftHalf[j]
            i += 1; k += 1
        else:
            alist[k] = rightHalf[j]
            j += 1; k += 1
        print "i=", i, "j=", j, "k=",k
    print "quit the loop"

    if(i<j):    #it means j has proceeded ahead in its righthalf
        remaining = leftHalf
        r = i
    else:
        remaining = rightHalf
        r = j

    print remaining
    print "k =",k
    while (r < len(remaining)):
        alist[k] = remaining[r]
        r += 1; k += 1

    print "i =", i , ";j = ", j,";k = ", k
    print "alist sorted =", alist
    print "*********"
    return alist

alist = [3,9,6,12,4,5]
mergesort(alist)
print alist

以下是输入的轨迹 alist = [3,9,6,12,4,5]

while 条件说 while i < len(leftHalf) and j < len(rightHalf): 必须允许 6leftHalf[1] 复制到 alist[3],对吗?我没有看到这种情况发生。

如果有人能解释失败的原因,我就会摆脱痛苦:)

你错了

if(leftHalf[i] < rightHalf[j]):
    alist[k] = leftHalf[j]
    i += 1; k += 1
else:
    alist[k] = rightHalf[j]
    j += 1; k += 1

您不需要 leftHalf[j],但 leftHalf[i] alist[k] = leftHalf[j]