【发布时间】:2018-09-27 16:45:24
【问题描述】:
我正在尝试理解以下用于合并排序的 python 代码。
函数mergeSort 没有返回任何值,我们也没有将排序列表存储到lefthalf 变量中。那么变量lefthalf 的值是如何在函数被调用后更改为 { 例如为 [26,54] } 的。
def mergeSort(alist):
print("Splitting ",alist)
if len(alist)>1:
mid = len(alist)//2
lefthalf = alist[:mid]
righthalf = alist[mid:]
print("Before left call------>",lefthalf)
mergeSort(lefthalf)
print("after left call------>",lefthalf)
mergeSort(righthalf)
i=0
j=0
k=0
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i]
i=i+1
else:
alist[k]=righthalf[j]
j=j+1
k=k+1
while i < len(lefthalf):
alist[k]=lefthalf[i]
i=i+1
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
j=j+1
k=k+1
print("Merging ",alist)
alist = [54,26,93,17,77,31,44,55,20]
mergeSort(alist)
print(alist)
输出:
Splitting [54, 26, 93, 17, 77, 31, 44, 55, 20]
Before left call------> [54, 26, 93, 17]
Splitting [54, 26, 93, 17]
Before left call------> [54, 26]
Splitting [54, 26]
Before left call------> [54]
Splitting [54]
Merging [54]
after left call------> [54]
Splitting [26]
Merging [26]
Merging [26, 54]
after left call------> [26, 54]
Splitting [93, 17]
Before left call------> [93]
Splitting [93]
Merging [93]
after left call------> [93]
Splitting [17]
Merging [17]
Merging [17, 93]
... ... 依此类推,直到它成为一个排序列表。
提前谢谢你。
【问题讨论】:
-
简单的答案是——列表在 Python 中是可变的。这意味着当您将列表传递给方法时,方法可以更改列表而无需返回任何内容。
标签: python function recursion mergesort