Python 合并排序算法的递归
几天前我开始学习python,当时我正在尝试解决排序算法。我最近开始使用合并排序算法。python中的典型合并排序程序(据我所知)包括一个合并函数和一个合并排序函数。以下几行代码在我看过的所有程序中都很常见:Python 合并排序算法的递归,python,recursion,mergesort,Python,Recursion,Mergesort,几天前我开始学习python,当时我正在尝试解决排序算法。我最近开始使用合并排序算法。python中的典型合并排序程序(据我所知)包括一个合并函数和一个合并排序函数。以下几行代码在我看过的所有程序中都很常见: left = mergesort(left) right = mergesort(right) merge(left, right) 例如,在本代码中: def divide_arr(a): #same as mergesort function l = len(a)
left = mergesort(left)
right = mergesort(right)
merge(left, right)
例如,在本代码中:
def divide_arr(a): #same as mergesort function
l = len(a)
if l <= 1: return a
left = a[0:int(l/2)]
right = a[int(l/2):l]
left = divide_arr(left)
right = divide_arr(right)
return merge(left, right, a)
def merge(left, right, arr):
pl, pr, pa = 0, 0, 0
while pl <len(left) and pr < len(right):
if left[pl] <= right[pr]:
arr[pa] = left[pl]
pa += 1
pl += 1
elif left[pl] > right[pr]:
arr[pa] = right[pr]
pa += 1
pr += 1
while pl < len(left):
arr[pa] = left[pl]
pa += 1
pl += 1
while pr < len(right):
arr[pa] = right[pr]
pa += 1
pr += 1
return arr
def divide_arr(a):#与合并排序功能相同
l=len(a)
如果你的程序是逐行执行的。函数调用暂停当前函数的执行,并等待被调用函数返回。当递归调用一个函数时(即使是间接调用,a
调用b
和b
调用a
),您基本上会得到一个函数的“新副本”,它有自己的局部变量和自己的独立执行。在您的示例中,以下是调用的顺序。缩进显示函数正在被外部级别的函数调用(将等待它返回)。请注意,return
不是一个函数;相反,它会停止它所在的函数。我假设在mergesort
的末尾发生的事情是它返回merge
的结果
mergesort([4, 3, 2, 1])
mergesort([4, 3])
mergesort([4])
return [4] to mergesort([4, 3])
mergesort([3])
return [3] to mergesort([4, 3])
merge([4], [3])
return [3, 4] to mergesort([4, 3])
return [3, 4] to mergesort([4, 3, 2, 1])
mergesort([2, 1])
exercise: figure out the rest :-)
请重复介绍之旅,尤其是和。您发布的代码缺少特定实现的上下文。此外,您对源代码的描述也不正确:许多网站都采用了合并排序的详细机制。您可以通过插入战略性的print
语句来实现这一点,这是程序员经常使用的一种调试技术。在那里,完成了,print
ed t恤…:-)我认为Python的编译器与此无关(翻译成字节码)。您可能正在考虑执行字节码的解释器。有很多关于mergesort和的解释。如果上下文是否决票的唯一原因,我将添加我昨天编写的完整代码,我没有添加它只是因为问题会变得不必要的冗长。