def merge (seq, p, q, r):
# n1: length of sub-array [p..q]
n1 = q - p + 1
# n2: length of sub-array [q+1 ..r]
n2 = r - q
# Left and Right arrays
left_arr = []
right_arr = []
for i in xrange(0, n1):
left_arr.append( seq[p+i] )
for j in xrange(0, n2):
right_arr.append( seq[q+j+1] )
j=0
i=0
for k in xrange(p,r+1):
if left_arr[i]<= right_arr[j]:
seq[k]=left_arr[i]
i+=1
else:
seq[k]=right_arr[j]
j+=1
return seq
s = [2,4,5,7,1,2,3,6]
p = 0
q = 3
r = 7
print merge(s,p,q,r)
这个怎么运作:
采用未排序的序列 s 以及必须合并序列的索引号。(p=初始,r=最终,q=中间)
现在,left_arr 和 right_arr 分别是 [p,q], [q+1, r]
我们取 left_arr 和 right_arr 初始值 (i=0, j=0)。我们遍历序列 seq...
在迭代时,我们将 seq 的值替换为排序后的值......
上面的函数能够排序到最后一个数字“7”..最后,它显示“IndexError”。我可以使用异常处理来捕获并修复它,但我认为......对于合并排序,它太多了......任何人都可以帮助我尽可能简单地修复代码。
我正在学习算法..(以下书籍:Thomas H. Cormen 的算法简介)