无法推断为什么代码在简单的 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):
必须允许 6
从 leftHalf[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]
。
我正在尝试在 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):
必须允许 6
从 leftHalf[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]
。