首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MergeSort错误

MergeSort错误
EN

Stack Overflow用户
提问于 2015-08-04 05:06:36
回答 1查看 33关注 0票数 0

我的合并排序代码如下。当我在测试数组5,3,2,1,8,4,9,11上运行它时,我得到了错误:"TypeError:'NoneType‘类型的对象没有len()",它在merge方法的开头抛出。我的打印输出如下:-正在尝试合并左侧:5-正在尝试合并右侧:3-合并数组: 3,5-正在尝试合并左侧:2-正在尝试合并右侧:1-合并数组: 1,2-正在尝试合并左侧:无-正在尝试合并右侧:无

看起来我已经成功地合并了前4个元素,然后它尝试合并两个空元素,我不知道为什么会这样。

代码语言:javascript
复制
def mergeSort(array, size):
    # BASE CASE
    if size <= 1:
        return array

    #split in half recursively and once they're all one element, merge
    else:
        left = mergeSort(array[:size / 2], size / 2)
        right = mergeSort(array[size / 2:], size / 2)

        temp = merge(left, right)
        print "merged array: ", temp

def merge(leftElements, rightElements):
    print("trying to merge left: "), leftElements
    print("trying to merge right: "), rightElements
    lengthLeft = len(leftElements)
    lengthRight = len(rightElements)
    mergedArray = []

    # - i is the index for leftElements
    # - j is the index for rightElements

    i = 0
    j = 0
    while (i < lengthLeft):
        while (j < lengthRight):
            if leftElements[i] < rightElements[j]:
                mergedArray.append(leftElements[i])
                i += 1
            elif leftElements[i] > rightElements[j]:
                mergedArray.append(rightElements[j])
                j += 1
            else:
                mergedArray.append(leftElements[i])
                mergedArray.append(rightElements[j])
                i += 1
                j += 1

            booleanLeft = i >= lengthLeft
            booleanRight = j >= lengthRight

            if ((i >= lengthLeft) or (j >= lengthRight)):
                break
        if ((i >= lengthLeft) or (j >= lengthRight)):
            break

    # now need to account for the case when one array clears before the other
    if (i < lengthLeft):
        for q in range(i, lengthLeft):
            mergedArray.append(leftElements[q])
    if (j < lengthRight):
        for q in range(j, lengthRight):
            mergedArray.append(rightElements[q])
    return mergedArray

print(mergeSort([5, 3, 2, 1, 8, 4, 9, 11], 8))
EN

回答 1

Stack Overflow用户

发布于 2015-08-04 05:24:57

您的mergeSort函数不返回任何内容

因此,根据定义,它现在返回,这就是nones的来源。

只需添加一个回车符,您就应该没问题。

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

https://stackoverflow.com/questions/31796778

复制
相关文章

相似问题

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