【发布时间】:2015-07-18 01:20:23
【问题描述】:
这似乎现在起作用了...欢迎公开批评。 Ty tsroten。
debug = 1
#List to be merged
A=[1,2,3,4,5,6,1,2,3,4,5,6,7]
#Artificial variables from calling function
p=0
r=len(A)
q=int(((p+r)/2)-1)
#List to append merged values
B=[]
#End of list
end=len(A)
if debug:
print ('Mid: %d\n' % (q))
print ('End: %d' % (end))
#Left and Right lists with sentinels
L=A[:q+1]
R=A[q+1:]
L.append(None)
R.append(None)
#Init counters
i=k=j=l=0
if debug:
print ('A:%s' %(A))
print ('\n')
print ('L:%s' %(L))
print ('R:%s' %(R))
print ('\n')
#Merge Left and Right lists
for k in A:
if debug:
print ('Iteration:%d' % (l))
l+=1
print ('i=%d, j=%d' % (i, j))
print ('B:%s' %(B))
print ('\n')
if L[i] is not None and L[i]<=R[j]:
B.append(L[i])
i+=1
else:
B.append(R[j])
j+=1
print ('Result:',B)
我正在尝试用 Python 编写一个合并算法,但我一直遇到这个错误。
Traceback (most recent call last):
File "C:/Python34/Scripts/mergeSort.py", line 19, in <module>
if L[i]<=R[j] and i<mid:
IndexError: list index out of range
我查看了其他算法,但它们似乎没有同样的问题。请帮忙。
A=[2,4,5,7,1,3,7,8,9]
B=[]
end=len(A)
mid=int(end/2)
L=A[:mid]
R=A[mid+1:]
i=k=j=0
for k in A:
if L[i]<=R[j] and i<mid:
B.append(L[i])
i+=1
elif j<end:
B.append(R[j])
j+=1
print (B)
【问题讨论】:
-
B = L + R有任何问题,或者您只是在探索替代方案? -
这更像是一种锻炼我的算法知识的练习,而不是寻找最简单的方法。我最终将把它结合起来形成一个合并排序算法。
标签: python algorithm merge mergesort