以下是Mergesort的代码,其中数据集设置为第一个元素。这段代码为我生成了一个与输入相同的输出数组。
Python3代码:
def mergesort(array):
length=len(array)
if(length<=1):
return (array)
else:
mid=length//2
left=[]
right=[]
# print(mid)
left=mergesort(array[0:mid])
right=mergesort(array[mid:])
# print(left, right)
arr=merge(left,right)
return (array)
def merge(left,right):
# print(left, right)
i=j=0
# l=len(left+right)
l1=len(left)
l2=len(right)
l=l1+l2
arr=list()
for k in range(l):
if i == l1:
arr.append(right[j])
j+=1
elif j == l2:
arr.append(left[i])
i+=1
elif(left[i] > right[j]):
arr.append(right[j])
j=j+1
elif (left[i] < right[j]):
arr.append(left[i])
i=i+1
# print(array)
return (arr)
array=list(map(int,input().split()))
# print(array)
print(mergesort(array))
这是我的程序的屏幕截图:
答案 0 :(得分:1)
代码中有两个错误:
首先,您在第14行输入错字:
def mergesort(array):
#....
arr=merge(left,right)
return (arr) # Not return (array)
第二,您的代码不适用于特殊输入,因为在执行合并操作时未实现<=
或>=
情况。因此,您的代码无法对2 5 3 5
进行排序。要解决此问题:
def merge(left,right):
# ...
elif(left[i] > right[j]):
arr.append(right[j])
j=j+1
elif (left[i] <= right[j]): # instead of <
arr.append(left[i])
i=i+1