首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并排序python 3

合并排序python 3
EN

Stack Overflow用户
提问于 2016-04-22 08:25:24
回答 2查看 1.5K关注 0票数 0

我实现了这样的合并排序算法,我遇到了一些问题

代码语言:javascript
复制
import sys

if __name__ == '__main__':
        input = sys.stdin.read()
        data = list(map(int, input.split()))
        n = data[0]
        a = data[1:]
        print(merge_sort(a))

def merge(left,rigt):
    result = []
    i = j = 0
    while i < len(left) and j < len(rigt):
        if left[i] <= rigt[j]:
            result.append(left[i])
            i += 1

        else:
            result.append(rigt[j])
            j += 1

    result += left[i:]
    result += rigt[j:]

    return result

def merge_sort(a):
    if len(a) <= 2:
        return 1

    middle = len(a)//2

    left = a[:middle]
    right = a[middle:]

    left = merge_sort(left)
    right = merge_sort(right)

    return list(merge(left,right))

我犯了这样的错误

代码语言:javascript
复制
TypeError: object of type 'int' has no len()

我不明白,我哪里出错了,为什么程序认为“左”和“右”是int,但是它是数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-22 10:19:59

你应该换掉

代码语言:javascript
复制
if len(a) <= 2:
    return 1

使用

代码语言:javascript
复制
if len(a) == 1:
    return a

若要返回不可分区的列表,请执行以下操作。

票数 2
EN

Stack Overflow用户

发布于 2016-04-22 08:36:31

您忘记了merge_sort函数的终止情况,它返回1。因此,当递归到达底部时,左和严格都是int,您需要在代码中考虑到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36788688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档