合并排序问题

时间:2020-10-10 07:24:31

标签: python sorting recursion mergesort

我正在尝试使用python和递归运行合并排序,在某些情况下无法正常工作,在大多数情况下均无法正常工作,请更正我尝试过的并且无法在代码中找到错误的地方。

def merge_sort(a, min, max):
    if max - min < 2:
        return a[min:max]

    mid = (min + max) // 2
    L = merge_sort(a, min, mid)
    R = merge_sort(a, mid, max)
    return (sort(L, R))

def sort(L, R):
    (c, m, n) = ([], len(L), len(R))
    (i, j) = (0, 0)
    while (i + j < m + n):
        if i == m:
            c.append(R[j])
            j += 1
        elif j == m:
            c.append(L[i])
            i += 1
        elif R[j] <= L[i]:
            c.append(R[j])
            j += 1
        elif L[i] < R[j]:
            c.append(L[i])
            i += 1
    return c

1 个答案:

答案 0 :(得分:1)

您在那里有错字,在第二种情况下应该是j==n

下一个不是错误,但通常会选择来自 left 参数的等号元素而不是右侧的元素,以使稳定(不要不必要地更改元素的顺序)。因此,在其他两种情况下,您还需要切换<=<比较。

命名也很重要。 sort函数实际上是 sorted_merge