分而治之排序算法难度

Divide and Conquer Sorting Algorithm Difficulty

合并排序实现难以给出正确的输出:

def merge_sort(a):
    # array of 1 item or less returns the same array
    if len(a) <= 1:
        return a
    # index for middle of array
    m = math.floor(len(a) / 2)
    # Recursive method for dividing and sorting original array into smaller 
    # arrays
    a0 = merge_sort(a[0:m])
    a1 = merge_sort(a[m:])
    merge(a0, a1, a)
    return a

def merge(a0, a1, a):
    # Indices for arrays a1 and a0
    i0 = 0
    i1 = 0
    for i in range(len(a)):
        # Array no longer contains elements not already sorted into Array a
        if i0 == len(a0):
            a[i] = a1[i1]
            i1 += 1
        # Array no longer contains elements not already sorted into Array a
        elif i1 == len(a1):
            a[i] = a0[i0]
            i0 += 1
        # Comparing Arrays a1 and a0, then adding smaller element to 
        # original Array a
        elif a[i0] < a[i1]:
            a[i] = a0[i0]
            i0 += 1
        else:
            a[i] = a1[i1]
            i1 += 1

逻辑是正确的,但我的索引或引用可能有问题,只是我没有捕捉到。 我的代码可能有什么问题,我该如何解决?

def merge(a0, a1, a):
    i0 = 0
    i1 = 0
    for i in range(len(a)):
        if i0 == len(a0):
            a[i] = a1[i1]
            i1 += 1
        elif i1 == len(a1):
            a[i] = a0[i0]
            i0 += 1
        elif a0[i0] < a1[i1]:
            a[i] = a0[i0]
            i0 += 1
        else:
            a[i] = a1[i1]
            i1 += 1

错误发生在merge(),你应该比较a0和a1而不是a。

第三个 elif 子句必须是

elif a0[i0] < a1[i1]: