List returns none-type after creation in recursive loop for merge sort
我试图通过自己写算法来理解它们。在尝试复制合并排序时,我遇到了一些问题:Left&Right返回无类型,并且在第一个while循环中为len(左)引发了一个错误。我一直在和代码作斗争,却不知道我遗漏了什么?它不应该只是循环直到左、右列表的大小减小到1,这将允许它们退出if循环并继续函数的下一部分吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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)) |
您只需添加一个返回语句(下面代码中的最后一个语句):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 |
如果函数不返回任何像
然后你可以用以下方法来测试它:
1 2 3 4 5 6 | import random lst = list(range(15)) random.shuffle(lst) ret = merge_sort(lst) print(ret) |
您的函数不包含返回语句。你应该在末尾加上