我是一个初学者,正在尝试理解第二行中的“return”究竟返回了什么,以及为什么不管我是否在下面第一行的开头添加了return语句,代码都能正常运行:
quickSort(arr, start, pivot_index-1)
return quickSort (arr, pivot_index+1, end)
以下是实际代码:
def quickSort(arr, start, end):
if start >= end:
return arr
else:
pivot_index = partition(arr, start, end)
quickSort(arr, start, pivot_index-1)
return quickSort (arr, pivot_index+1, end)
def partition(arr, low, high):
pivot_value = arr[high]
for i in range(low,high):
if arr[i] < pivot_value:
arr[i], arr[low] = arr[low], arr[i]
low += 1
arr[low], arr[high] = arr[high], arr[low]
pivot_position = low
return pivot_position
#--------------------------------------
arr = [1,2,9,10,6,15,8,24,3,1,8,13,6,2,7]
print(quickSort(arr,0,len(arr)-1))
1条答案
按热度按时间pxy2qtax1#
这里的
quickSort
函数使用了递归,所以在您的问题行中,它返回了参数为(arr, pivot_index+1, end)
的调用的返回值,因为您需要对数组的两个部分进行排序,即(quickSort(arr, start, pivot_index-1))
的左边和pivot的右边(returnquickSort (arr, pivot_index+1, end))
要得到正确的结果,在quickSort(arr, start, pivot_index-1)
行前面加上return语句会导致pivot右边的部分不排序,并得到不正确的输出(甚至代码也没有崩溃)。如果你想了解更多关于quickSort的知识,这里有资源:https://www.geeksforgeeks.org/quick-sort/如果你想了解更多关于递归的知识,你可以参考这个链接:https://www.geeksforgeeks.org/introduction-to-recursion-data-structure-and-algorithm-tutorials/