我试图在python中实现mergeSort,但是得到了类型错误。你知道吗
我试着调试代码,但没有成功。你知道吗
def merge(L, R):
(C, m, n) = ([], len(L), len(R))
(i,j) = (0,0)
while i+j < m+n:
if i == m: # Case 1 -> List A is empty
C.append(R[j])
j += 1
elif j == n: # Case 2 -> List B is empty
C.append(L[i])
i += 1
elif L[i] <= R[j]: # Case 3 -> Head of A is smaller
C.append(L[i])
i += 1
elif L[i] > R[j]:
C.append(R[j])
j += 1
print(C)
def mergeSort(A, left, right):
if right - left <= 1: # Base Case
return(A[left:right])
if right - left > 1: # Recurive call
mid = (left+right)//2
L = mergeSort(A, left, mid)
R = mergeSort(A, mid, right)
return(merge(L, R))
如果有人知道我做错了什么,请引导我走正确的路。你知道吗
使用一对相互递归的函数(msa2a、msa2b)进行自顶向下的合并排序,以更改合并方向并避免复制数据:
自底向上的合并排序只稍微快一点,但是对于这个版本,如果传递的次数是奇数,它会在第一次传递时进行交换,这有助于更进一步。合并函数(mrg)与上面显示的自顶向下合并排序相同。你知道吗
更快的方法是混合插入+合并排序,将插入排序用于运行<;=64个元素(取决于元素大小)。我没有python代码作为例子。由于Python是解释性的,所以它慢一些,在上面所示的示例合并排序中,Python占用的长度是C++中编译的相同代码的64倍。你知道吗
merge
必须返回C
,而不是打印它。你知道吗相关问题 更多 >
编程相关推荐