def merge _ sort ( lst ): if len ( lst )<=1: return Ist middle = len ( lst )//2 left = merge _ sort ( lst [: middle ]) right =() return merge ( left , right ) def merge ( A , B ): if len ( A )==0: return B if len ( B )==0: return A if A [0]> B [ O ]: E return [ B [ O ]]+ merge ( A , B [1:]) else : return () Ist =[-9,10,1,5,3,7,8,10] print ( merge _ sort ( lst ))
时间: 2023-12-21 16:05:07 浏览: 73
排序-归并排序(Merge sort)
这段代码存在语法错误,因为在第 4 行的 `right` 变量赋值时,只给出了一个空的括号,而没有实际的值。这会导致在调用 `merge` 函数时出错,因为 `merge` 函数需要两个非空列表作为参数。如果想要修复这个问题,可以将 `right` 变量赋值为 `merge_sort(lst[middle:])`,即将右半部分的列表作为参数传递给 `merge_sort` 函数进行排序。修复后的代码如下:
```
def merge_sort(lst):
if len(lst) <= 1:
return lst
middle = len(lst) // 2
left = merge_sort(lst[:middle])
right = merge_sort(lst[middle:])
return merge(left, right)
def merge(A, B):
if len(A) == 0:
return B
if len(B) == 0:
return A
if A[0] > B[0]:
return [B[0]] + merge(A, B[1:])
else:
return [A[0]] + merge(A[1:], B)
lst = [-9, 10, 1, 5, 3, 7, 8, 10]
print(merge_sort(lst))
```
输出结果为 `[-9, 1, 3, 5, 7, 8, 10, 10]`,与上一个问题中的结果相同。
阅读全文