shu = [5, 3, 7, 2, 4, 6, 1, 8]
def test(shu):
if len(shu) <= 1:
return shu
mid = int(len(shu)/2)
llist, rlist = test(shu[:mid]), test(shu[mid:])
result = []
i = 0
j = 0
while i < len(llist) and j < len(rlist):
if rlist[j] < llist[i]:
result.append(rlist[j])
j = j + 1
else:
result.append(llist[i])
i = i + 1
result = result + llist[i:] + rlist[j:]
return result
print(test(shu))
为什么结果错误
你的代码实现了归并排序的思想,但是有一个小错误。在while循环结束后,你应该把result的赋值语句放在循环外面,否则会导致每次只返回一个元素。我修改了一下,你可以参考一下。
shu = [5, 3, 7, 2, 4, 6, 1, 8]
def test(shu):
if len(shu) <= 1:
return shu
mid = int(len(shu)/2)
llist, rlist = test(shu[:mid]), test(shu[mid:])
result = []
i = 0
j = 0
while i < len(llist) and j < len(rlist):
if rlist[j] < llist[i]:
result.append(rlist[j])
j = j + 1
else:
result.append(llist[i])
i = i + 1
# 把result的赋值语句放在循环外面
result = result + llist[i:] + rlist[j:]
return result
print(test(shu))