代码之家  ›  专栏  ›  技术社区  ›  Ai coding ai

在递归循环中为合并排序创建后,列表返回none类型

  •  0
  • Ai coding ai  · 技术社区  · 7 年前

    def merge_sort(A):
    
        if len(A) < 2:
            return A
        else:
            mid= len(A)//2
            left= merge_sort(A[:mid])
            right= merge_sort(A[mid:])
    
        i = j = 0
        sortedlist = []
        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                sortedlist.append(left[i])
                i+=1
            else:
                sortedlist.append(right[j])
                j+=1
        while i < len(left):
            sortedlist.append(left[i])
            i+=1
        while j < len(right):
            sortedlist.append(right[j])
            j+=1
        print(str(sortedlist))
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   hiro protagonist    7 年前

    您只需添加一条返回语句(下面代码中的最后一条语句):

    def merge_sort(A):
    
        if len(A) < 2:
            return A
        else:
            mid= len(A)//2
            left = merge_sort(A[:mid])
            right = merge_sort(A[mid:])
    
        i = j = 0
        sortedlist = []
        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                sortedlist.append(left[i])
                i+=1
            else:
                sortedlist.append(right[j])
                j+=1
        while i < len(left):
            sortedlist.append(left[i])
            i+=1
        while j < len(right):
            sortedlist.append(right[j])
            j+=1
    
        # NEED TO RETURN THE LIST HERE!
        return sortedlist
    

    如果函数不返回以下语句 left = merge_sort(A[:mid]) 将分配 None left 而不是排序的(一半)列表。

    然后,您可以使用以下工具进行测试:

    import random
    
    lst = list(range(15))
    random.shuffle(lst)
    ret = merge_sort(lst)
    print(ret)
    
        2
  •  1
  •   clemens    7 年前

    您的函数不包含返回语句。您应该添加 return sortedlist