关于归并排序问题,如何解决?

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))

img

为什么结果错误

你的代码实现了归并排序的思想,但是有一个小错误。在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))