Python 2.7 合并排序在Python中返回相同的数组
对于合并排序,我编写了以下代码: 我已经测试了正确工作的合并函数。但在mergeSort函数中,我无法处理数组。它返回与输入列表相同的列表Python 2.7 合并排序在Python中返回相同的数组,python-2.7,mergesort,Python 2.7,Mergesort,对于合并排序,我编写了以下代码: 我已经测试了正确工作的合并函数。但在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
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
def合并排序(a):
l、 h=0,len(a)-1
中间=(l+h)/2
如果(l我将重写合并,如下所示:
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
- 在切片中获取数组的完整开头/结尾时,不需要第一个/最后一个边界
a[l:mid+1]
是一个切片。它复制a的内容。a是不变的。你应该做frst=mergeSort(a[l:mid+1])sec=mergeSort(a[mid+1:h+1])返回merge(frst,sec)
作为旁注c=[[]对于范围内的i(n\u a+n\u b)]
是无用和不正确的(它对算法没有任何影响,但没有意义)。使用c=[]
,然后删除k,然后使用c.append(…)