我正在尝试根据以下伪代码在Python中实现归并排序。我知道有许多实现方法,但我还没有找到一个像这样以for循环结束而不是while循环的模式跟随该模式的实现。此外,在子数组中将最后一个值设置为无穷大是我在其他实现中没有见过的。注意:以下伪代码具有基于1的索引,即索引从1开始。因此,我认为我的最大问题是正确索引。现在它只是不能正确排序,使用调试器跟踪非常困难。我的实现在底部。
当前输出:
Input: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Merge Sort: [0, 0, 0, 3, 0, 5, 5, 5, 8, 0]
def merge_sort(arr, p, r):
if p < r:
q = (p + (r - 1)) // 2
merge_sort(arr, p, q)
merge_sort(arr, q + 1, r)
merge(arr, p, q, r)
def merge(A, p, q, r):
n1 = q - p + 1
n2 = r - q
L = [0] * (n1 + 1)
R = [0] * (n2 + 1)
for i in range(0, n1):
L[i] = A[p + i]
for j in range(0, n2):
R[j] = A[q + 1 + j]
L[n1] = 10000000 #dont know how to do infinity for integers
R[n2] = 10000000 #dont know how to do infinity for integers
i = 0
j = 0
for k in range(p, r):
if L[i] <= R[j]:
A[k] = L[i]
i += 1
else:
A[k] = R[j]
j += 1
return A
float('inf')
表示正无穷,使用float('-inf')
表示负无穷。 - M-Chen-3