错的那版,在已排好序的输入上给什么
下面 msort_bad 漏了合并的最后一句。先拿最顺手的那个测试用例——已经排好序的数组——试试:
def msort(a):
if len(a) <= 1:
return list(a)
m = len(a) // 2
L = msort(a[:m])
Rr = msort(a[m:])
out, i, j = [], 0, 0
while i < len(L) and j < len(Rr):
if L[i] <= Rr[j]:
out.append(L[i]); i += 1
else:
out.append(Rr[j]); j += 1
return out + L[i:] + Rr[j:]
def msort_bad(a):
"""漏了一句:合并到最后没把左半剩下的接上"""
if len(a) <= 1:
return list(a)
m = len(a) // 2
L = msort_bad(a[:m])
Rr = msort_bad(a[m:])
out, i, j = [], 0, 0
while i < len(L) and j < len(Rr):
if L[i] <= Rr[j]:
out.append(L[i]); i += 1
else:
out.append(Rr[j]); j += 1
return out + Rr[j:]
print("/".join(str(x) for x in msort_bad([0, 1, 2, 3, 4])))
全部评论