所以我试图理解python中这个简单的合并和排序算法。这是代码:
def merge(left, right, lt):
"""Assumes left and right are sorted lists.
lt defines an ordering on the elements of the lists.
Returns a new sorted(by lt) list containing the same elements
as (left + right) would contain.
"""
result = []
i,j = 0, 0
while i < len(left) and j < len(right):
if lt(left[i], right[j]):
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
while (i < len(left)):
result.append(left[i])
i += 1
while (j < len(right)):
result.append(right[j])
j += 1
return result
def sort(L, lt = lambda x,y: x < y):
"""Returns a new sorted list containing the same elements as L"""
if len(L) < 2:
return L[:]
else:
middle = int(len(L)/2)
left = sort(L[:middle], lt)
right = sort(L[middle:], lt)
print left, right
return merge(left, right, lt)
我得到了它想要做的事情,我理解了合并函数中的所有代码,并对排序函数有基本的了解。
我不明白排序功能的“其他”部分实际上是如何工作的。似乎它一直在递归调用 sort 函数以将越来越小的拆分列表分配给左右变量。但是,由于它在每次调用递归函数时都将新列表分配给“左”和“右”,所以最终结果不只是左和右的最小版本吗?
似乎位于递归之外的合并函数如何知道它需要合并创建的每个拆分列表?