问题描述
我正在尝试编写递归合并排序算法,但是我的合并算法不是递归的。
有人告诉我在下面的函数中使用以下参数来做到这一点。
def merge(left_buffer,right_buffer,data):
"Merges two sets of data together by comparison"
print("MERGING",left_buffer,"and",right_buffer)
#Dual iteration
m = 1
n = 1
k = 0
j = 0
for i in range(len(data)):
if len(left_buffer) == 0:
data[i] = right_buffer[k]
k+=1
elif len(right_buffer) == 0:
data[i] = left_buffer[j]
j += 1
elif left_buffer[0] < right_buffer[0]:
data[i] = left_buffer[0]
left_buffer = left_buffer[1:]
else:
data[i] = right_buffer[0]
right_buffer = right_buffer[1:]
print('Result of the merge:',data)
然后是我的递归归并排序算法:
def merge_sort(data):
"Merge sort recursion"
if len(data) == 1:
return [data[0]]
else:
half_length = len(data)//2
left_half = data[0:half_length]
right_half = data[half_length:]
#Only sorting the left side
left = merge_sort(left_half)
right = merge_sort(right_half)
return merge(left,right,data)
我收到的主要问题是,在两个列表的最终合并时,我发现我正在合并 None
类型。
我不知道如何解决这个问题。
也许我的合并算法不正确,但我的导师说没问题。
解决方法
您的 merge
方法不返回任何内容,因此当您的 merge_sort
方法返回时,它也会返回 None
。
这些 None
值被传递到 left
和 right
,然后您将它们传递到您的 merge
方法中。
也许您希望您的 merge_sort
方法进行合并,然后返回合并后的数据?即:
merge(left,right,data)
return data
或者,您可以修改 merge
使其返回合并的数据,方法是在其末尾添加行 return data
。