I am trying to debug a merge method in a program for merge-sort. Here is the method:
def merge(self, leftarray, rightarray):
n = len(leftarray) + len(rightarray)
print "len(leftarray) = "+str(len(leftarray))
print "len(rightarray) = "+str(len(rightarray))
i = 0
j = 0
merged = []
for k in range(n):
if i == len(leftarray):
merged.extend(rightarray[j:])
k += len(rightarray[j:])
elif j == len(rightarray):
merged.extend(leftarray[i:])
k += len(leftarray[i:])
elif leftarray[i] <= rightarray[j]:
merged.append(leftarray[i])
i += 1
elif leftarray[i] > rightarray[j] :
merged.append(rightarray[j])
j += 1
return merged
The for k in range(n)
is the loop exhibiting the problem.
Here is the debugger trace:
> /home/**/Documents/**/**/merge_sort.py(36)merge()
-> elif j == len(rightarray):
(Pdb) n
> /home/**/Documents/**/**/merge_sort.py(37)merge()
-> merged.extend(leftarray[i:])
(Pdb) n
> /home/**/Documents/**/**/merge_sort.py(39)merge()
-> k += len(leftarray[i:])
(Pdb) n
> /home/**/Documents/**/**/merge_sort.py(30)merge()
-> for k in range(n):
(Pdb) p k
3
(Pdb) n
> /home/**/Documents/**/**/merge_sort.py(31)merge()
-> if i == len(leftarray):
(Pdb) p n
3
(Pdb)
As can be seen in the trace, the value of n
is 3 and execution should not enter the loop when k
is 3. However execution goes to the line if i == len(leftarray):
instead of return merged
.