我正在尝试使用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
答案 0 :(得分:1)
您在那里有错字,在第二种情况下应该是j==n
。
下一个不是错误,但通常会选择来自 left 参数的等号元素而不是右侧的元素,以使稳定(不要不必要地更改元素的顺序)。因此,在其他两种情况下,您还需要切换<=
和<
比较。
命名也很重要。 sort
函数实际上是 sorted_merge
。