for merge sort我写了这段代码: 我已经测试了正常工作的合并功能。但在mergeSort函数中,我无法处理数组。它返回与输入列表相同的列表。
def mergeSort(a):
l, h = 0, len(a)-1
mid = (l+h)/2
if (l<h-1): #the lowest length must be 2
mergeSort(a[l:mid+1])
mergeSort(a[mid+1:h+1])
return merge(a[l:mid+1],a[mid+1:h+1])
def merge(a,b):
n_a = len(a)
n_b = len(b)
c = [[] for i in range(n_a + n_b)]
i,j,k=0,0,0
while (i<n_a and j<n_b):
if a[i]<b[j]:
c[k] = a[i]
i += 1
else:
c[k]= b[j]
j += 1
k += 1
while(i<n_a):
c[k] = a[i]
k+=1
i+=1
while(j< n_b):
c[k] = b[j]
k+=1
j+=1
return c
答案 0 :(得分:0)
我会重写合并:
def mergeSort(a):
h = len(a)
mid = h / 2
if h >= 2:
return merge(mergeSort(a[:mid]), mergeSort(a[mid:]))
else:
return a
一些注意事项:
l
始终为0,不妨将其删除h
为len(a) - 1
,但您使用h + 1
,也可以使用h = len(a)
h >= 2
更清楚地表明您的列表中至少需要2个项目mid
可以是len(a) / 2
。