def mergeSort(A, l, r):
if l < r:
mid = (l + r) // 2
mergeSort(A, l, mid)
mergeSort(A, mid + 1, r)
merge(A, l, mid, r)
def merge(arr, l, mid, r):
arr1 = []
arr2 = []
for i in range(mid):
arr1.append(arr[i])
for j in range(mid, r):
arr2.append(arr[j])
i = 0
j = 0
k = 0
while (i < len(arr1) and j < len(arr2)):
if arr1[i] < arr2[j]:
arr[k] = arr1[i]
i += 1
else:
arr[k] = arr2[j]
j += 1
k += 1
while i < len(arr1):
arr[k] = arr1[i]
i += 1
k += 1
while j < len(arr2):
arr[k] = arr2[j]
j += 1
k += 1
arr = [2, 9, 7, 6, 1, 8, 4, 3]
mergeSort(arr, 0, 8)
print(arr)
代码中的某处有一个小错误,我找不到请尝试在您的机器上使用不同的测试用例运行此代码。让我知道我在这里做错了什么。我不知道为什么我得到了不正确的答案:[1, 2, 3, 4, 6, 8, 9, 7]
你有索引问题。你用 C 风格编写了代码。只需使用切片即可解决您的问题
将 arr1 和 arr2 的定义(删除 arr1 和 arr2 的循环)更改为:
arr1 = arr[:mid]
arr2 = arr[mid:]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句