Python中的快速排序递归
我一直在研究下面的快速排序算法,但无法理解为什么需要在括号中返回[pivot],以及为什么需要返回它。函数的输出是否只需要在现有函数中运行新的数组(越来越少),然后像第一次调用它时那样获取pivot值Python中的快速排序递归,python,algorithm,quicksort,Python,Algorithm,Quicksort,我一直在研究下面的快速排序算法,但无法理解为什么需要在括号中返回[pivot],以及为什么需要返回它。函数的输出是否只需要在现有函数中运行新的数组(越来越少),然后像第一次调用它时那样获取pivot值 def quick_sort(arr): if len(arr) <= 1: return arr else: pivot = arr.pop() greater = [] less = [] for i in arr
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr.pop()
greater = []
less = []
for i in arr:
if i > pivot:
greater.append(i)
else:
less.append(i)
return quick_sort(less) + [pivot] + quick_sort(greater)
arr1 = [7,8,9,6,5,4,7,8,9]
quick_sort(arr1)
def快速排序(arr):
如果透镜(arr)轴:
更大。附加(i)
其他:
减.追加(i)
返回快速排序(较小)+[pivot]+快速排序(较大)
arr1=[7,8,9,6,5,4,7,8,9]
快速分拣(arr1)
为什么需要在括号中返回pivot?
它们正在执行列表连接。考虑以下事项:
a = [1,2,3]
b = [4,5,6]
然后a+b=[1,2,3,4,5,6]
。但是如果b
只有一个元素(比如说,7),该怎么办?然后我们必须有b=[7]
,以便a+b
执行列表连接。如果我们说b=7
是一个整数,那么操作a+b
(列表加整数)就没有定义
为什么需要返回pivot? 快速排序的思想是围绕一个轴进行排序,这样,小于轴的所有元素都位于左侧,大于轴的所有元素都位于右侧 让list
a
为小于轴心p
的所有元素,listb
为大于轴心p的所有元素
然后,我们必须返回所有元素的列表串联(小于(a
),然后是枢轴,然后是所有元素的串联(大于(b
)
这相当于a+c+b
,其中c=[p]
,或者更简而言之,a+[p]+b
,正如您在代码中所写的那样。解决方案试图将三个数组合并为一个数组。例如:
mergedArr=[1,2,3]+[4]+[5,6,7]
打印(合并)#[1,2,3,4,5,6,7]
将pivot包装在括号内只会显式地将其转换为列表,以便python程序可以将所有内容附加在一起,因为您正在将列表合并为一个列表。这是否回答了您的问题@Sayse但是为什么首先需要返回pivot值呢?我不知道你在问什么,你需要它,否则每次调用函数时都会从列表中丢失一个元素pop()会从列表中删除一个元素,所以你必须显式地将它放回返回的列表中,否则每次递归都会丢失一个项目。