Python 2.7 合并排序在Python中返回相同的数组

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

对于合并排序,我编写了以下代码: 我已经测试了正确工作的合并函数。但在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
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(…)