gpt4 book ai didi

python - 递归 Python 快速排序中的变量作用域

转载 作者:太空宇宙 更新时间:2023-11-04 06:02:51 26 4
gpt4 key购买 nike

我对 Python 中的变量范围有点困惑。我怀疑以下代码由于其变量范围问题而无法正常工作。

def partition(a):
#return indext
p=a[0]
i=1
j=1
while j<len(a):
if a[j]<p:
a[j],a[i]=a[i],a[j]
i+=1
j+=1
a[0],a[i-1]=a[i-1],a[0]
return (i-1,i)

def qsort(input_array):
if len(input_array)<=1:
pass
else:
#partition_index[0] is the index of the pivot
#partition_index[1] is the indext after the pivot
if len(input_array)==2:
partition_index=partition(input_array)
else:
partition_index=partition(input_array)
qsort(input_array[:partition_index[0]])
qsort(input_array[partition_index[1]:])

这是输出...我不明白为什么这不起作用...有人可以帮我吗?

这里是输出:

 >>> a=[10,11,5,4,12,23,2]
>>>qsort(a)
>>>a
[2, 5, 4, 10, 12, 23, 11]

如果我让 qsort 返回,它会工作......我很困惑......这是我输入 return 语句后的代码。

 def partition(a):
#return indext
p=a[0]
i=1
j=1
while j<len(a):
if a[j]<p:
a[j],a[i]=a[i],a[j]
i+=1
j+=1
a[0],a[i-1]=a[i-1],a[0]
return (i-1,i)


def qsort(input_array):
if len(input_array)<=1:
pass
else:
#partition_index[0] is the index of the pivot
#partition_index[1] is the indext after the pivot
if len(input_array)==2:
partition_index=partition(input_array)
else:
partition_index=partition(input_array)
input_array[:partition_index[0]]=qsort(input_array[:partition_index[0]])
input_array[partition_index[1]:]=qsort(input_array[partition_index[1]:])
return input_array

最佳答案

quicksort(input_array[:partition_index[0]]) 实际上并没有在数组的第一个分区上调用快速排序,它在数组的第一个分区的副本上调用快速排序。因此,您的代码在原地对数组进行分区,然后创建两半的副本并尝试对它们进行排序(但从不对生成的数组执行任何操作),因此您的递归调用无效。

如果你想这样做,你必须避免使用切片复制列表,而是传递整个列表以及你希望函数应用的范围。

关于python - 递归 Python 快速排序中的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com