为什么输入数组的递归函数内改变?

问题描述 投票:3回答:1

我想了解蟒蛇快速搜索算法。这里是我工作的代码:

def partition2(a, l, r):
x = a[l]
j = l;
for i in range(l + 1, r + 1):
    if a[i] <= x:
        j += 1
        a[i], a[j] = a[j], a[i]
a[l], a[j] = a[j], a[l]
return j



def randomized_quick_sort(a, l, r):

if l >= r:
    return
k = random.randint(l, r)
a[l], a[k] = a[k], a[l]
#use partition3
m = partition2(a, l, r)


randomized_quick_sort(a, l, m - 1);
randomized_quick_sort(a, m + 1, r);

然后我调用这个函数定义一个变量。例如:

b = [5,1,4]
randomized_quick_sort(b, 0, 2)

我的问题是,当我尝试打印B中的函数调用后,它打印为[1,4,5]。那么,怎么来的这个数组的值是在函数里改变???这不是一个全局变量。乳清中的局部变量里面的功能将超越它?请帮忙

python recursion
1个回答
2
投票

当你提供一个清单,你正在传递一个指针列表中的函数参数,意味着参数a不是自己的数组,而是一个指针b

你所希望做的是只提供阵列b的项目randomized_quick_sort()

这可以通过以下的调整来完成:

randomized_quick_sort (b[:], 0, 2);

注意b[:]b代替。现在,当你调用该函数后,打印b你会像之前的值相同。

你可以找到关于这个here更多信息

© www.soinside.com 2019 - 2024. All rights reserved.