Merge Sort在Python中返回相同的数组

时间:2014-10-24 19:16:11

标签: python-2.7 mergesort

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

1 个答案:

答案 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,不妨将其删除
  • hlen(a) - 1,但您使用h + 1,也可以使用h = len(a)
  • 实际上写h >= 2更清楚地表明您的列表中至少需要2个项目
  • mid可以是len(a) / 2
  • 在切片中获取数组的完整开头/结尾时,不需要第一个/最后一个绑定