【发布时间】:2016-01-18 15:52:54
【问题描述】:
您能否查看以下代码并帮助我理解为什么我的合并排序代码不起作用?我对这段代码做了很多修改,我尝试在可能的情况下从索引中添加 +1 和删除 -1,但我无法调试它。
#!/usr/bin/python
def Merge(a,p,q,r):
n1=q-p+1
n2=r-q
(l,ri)=([],[])
for i in range(n1):
l.append(a[p+i])
for j in range(1,n2+1):
ri.append(a[q+j])
l.append(float('inf'))
ri.append(float('inf'))
print 'l and ri are %s and %s' % (l,ri)
i=0
j=0
for k in range(p,r+1):
if l[i]<=ri[j]:
a[k]=l[i]
i+=1
else:
a[k]=ri[j]
j+=1
print 'a after merge is %s' % (a)
def MergeSort(a,p,r):
#print 'a,P and r are %s, %d and %d' % (a,p,r)
if p+1<r:
q=divide(r-p)
MergeSort(a,p,q)
print 'After MS of %d and %d' % (p,q)
MergeSort(a,q+1,r)
print 'After 2nd MS of %d and %d' % (q+1,r)
print 'Before Mer of %d and %d and %d' % (p,q,r)
Merge(a,p,q,r)
def divide(number):
Q,R=divmod(number,2)
return Q+int(bool(R))
if __name__=="__main__":
a=[2,9,6,5,4]
MergeSort(a,0,len(a)-1)
print a
是不是因为我的数组是从 0 索引开始的?
【问题讨论】:
标签: python algorithm sorting merge mergesort