我一直在python中实现合并排序,而没有创建额外的变量来减少空间复杂度。这是我的尝试。
我的基本合并排序逻辑如下所示,它包含两个功能:-
mergeSort。
合并
它们的代码如下所示:-
def mergeSort(A, start_index, end_index):
if ((len(A)) > 1):
middle = math.floor((start_index + end_index) / 2)
mergeSort(A[start_index:middle], start_index, middle)
mergeSort(A[middle:end_index], middle, end_index)
merge(A[start_index:middle], A[middle: end_index], A)
#Create a new empty list for array to merge
我的合并逻辑如下所示:-
def merge(U, V, A):
m = len(U) - 1
n = len(V) - 1
U.append(inf)
V.append(inf)
i = j = k = 0
while(k <= (m + n + 1)):
if(U[i] < V[j]):
A[k] = U[i]
i += 1
else:
A[k] = V[j]
j += 1
k += 1
我已将A = [5,4,3,2,1]传递为mergeSort的输入。作为mergeSort(A,0,4),现在的输出令人惊讶地为[3,2,5,4,1]。
答案 0 :(得分:0)
我不允许发表评论,但您应该在代码的第一个函数mergeSort中添加
If (start_index < end_index) :