【发布时间】:2023-03-22 00:12:02
【问题描述】:
我编写了一个应该执行递归合并排序的程序,我首先创建了一个fusion 方法来使用索引合并两个列表
这里是fusion 方法
def Fusion (L,d,f,m):
aux=[]
i_d=d
i_m=m
while (i_d<=m-1 and i_m<=f-1):
if(L[i_d]<=L[i_m]):
aux.append(L[i_d])
i_d+=1
else:
aux.append(L[i_m])
i_m+=1
while (i_d<=m-1):
aux.append(L[i_d])
i_d+=1
while (i_m<=f-1):
aux.append(L[i_m])
i_m+=1
for j in range(len(aux)):
L[j]=aux[j]
这个方法工作正常,我用两个排序列表测试过。
merge 方法在这里
def sort_fusion(T,a,b):
if (a<b):
m=(a+b)//2
sort_fusion(T,a,m)
sort_fusion(T,m+1,b)
Fusion(T,a,b,m)
运行程序
k1 =[3,1,0,9,1,2,6,8,5,7]
a=0
b=len(k1)
sort_fusion(k1,a,b)
程序给出这个[2, 5, 6, 6, 7, 8, 1, 8, 5, 7]作为输出给出这个输入[3, 1, 0, 9, 1, 2, 6, 8, 5, 7]
我无法理解程序的行为,当我评论 sort_fusion(T,m+1,b) 指令时,它给了我这个 [0, 1, 2, 3, 6, 8, 5, 7, 9, 1] 作为输出,对我来说,算法很好,当我跟踪它的进度时。
谁能指出问题所在。
【问题讨论】: