Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么合并排序算法需要递归 def合并排序(arr): 如果len(arr)>1: mid=len(arr)//2#查找数组的mid L=arr[:mid]#分割数组元素 R=arr[mid:][分成两半 合并排序(L)#对上半部分进行排序 合并排序(R)#对后半部分进行排序 i=j=k=0 #将数据复制到临时数组L[]和R[] 而i_Python_Algorithm_Sorting_Mergesort - Fatal编程技术网

Python 为什么合并排序算法需要递归 def合并排序(arr): 如果len(arr)>1: mid=len(arr)//2#查找数组的mid L=arr[:mid]#分割数组元素 R=arr[mid:][分成两半 合并排序(L)#对上半部分进行排序 合并排序(R)#对后半部分进行排序 i=j=k=0 #将数据复制到临时数组L[]和R[] 而i

Python 为什么合并排序算法需要递归 def合并排序(arr): 如果len(arr)>1: mid=len(arr)//2#查找数组的mid L=arr[:mid]#分割数组元素 R=arr[mid:][分成两半 合并排序(L)#对上半部分进行排序 合并排序(R)#对后半部分进行排序 i=j=k=0 #将数据复制到临时数组L[]和R[] 而i,python,algorithm,sorting,mergesort,Python,Algorithm,Sorting,Mergesort,在上面的代码中使用mergeSort(L)和mergeSort(R)有什么意义?即使您删除了这个递归,我们也可以得到排序列表。那为什么这是必要的呢?上面的代码直接取自geeks for geeks,我在许多其他地方也看到了合并排序中的这种递归。使用它有什么意义 另一个问题是:mergeSort(L)或者甚至mergeSort(R)如何在没有任何return语句的情况下返回任何内容,因为当arr的长度

在上面的代码中使用
mergeSort(L)
mergeSort(R)
有什么意义?即使您删除了这个递归,我们也可以得到排序列表。那为什么这是必要的呢?上面的代码直接取自geeks for geeks,我在许多其他地方也看到了合并排序中的这种递归。使用它有什么意义


另一个问题是:
mergeSort(L)
或者甚至
mergeSort(R)
如何在没有任何
return
语句的情况下返回任何内容,因为当
arr
的长度<1时,它简单地失败并且不返回任何内容。

没有递归的mergeSort函数不会对数组排序,它只是合并(因此而得名)应该已经分类的两部分。这就是为什么在合并两个数组之前需要对数组的每一半调用函数的原因


此外,mergeSort不会返回任何内容,它只是对数组进行适当的排序,对于长度小于1的数组不会执行任何操作,因为这样就没有要排序的元素。

如果删除递归调用,您将只合并两部分
L=[12,11,13]
R=[5,6,7]

内容或
arr
将变为
[5,6,7,12,11,13]
,未排序

您可能已经使用一个数组进行了测试,其中两半都已排序,但在一般情况下,需要递归


mergeSort
不返回任何内容,它会将
arr
更新到位。

关于“mergeSort(L)甚至mergeSort(R)如何在没有任何返回语句的情况下返回任何内容”。
mergesort
函数将列表排序到位。即,它修改您传递的原始列表。一般来说,删除递归调用在某些特定情况下可能会生成一个排序列表,但肯定不是在所有情况下。尝试使用一个包含100个随机数的数组。“即使你删除了这个递归,我们也可以得到排序列表”:不!合并排序有一个迭代版本,称为。大多数库使用插入排序和自底向上合并排序的变体和混合。