lin桔桔 2023-04-10 11:39 采纳率: 100%
浏览 13
已结题

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

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

为什么结果错误

  • 写回答

1条回答 默认 最新

  • 语言-逆行者 2023-04-10 11:53
    关注

    你的代码实现了归并排序的思想,但是有一个小错误。在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))
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月10日
  • 已采纳回答 4月10日
  • 创建了问题 4月10日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部