我用Python编写了一个快速排序程序,我的目标是计算总的比较结果。我声明了一个名为thesum
的全局变量。当我在分区功能中使用thesum
时,我可以正确计算出thesum
。但是,当我试图在递归函数中计算总和时,它给出了错误的答案。下面是我做过分别为:Python全局变量不能在递归函数中工作
方法1:
计算在分区函数的总和:
def partition(listToSort, start, end):
global thesum
thesum = thesum+end-start
在我使用分区算法中,我需要添加M-1当分割一个m长度的数组时。
方法2:
计算递归函数的qsort的总和:
def qsort(listTo, start, end):
if start >= end :
return
else:
index = partition(listTo, start, end)
qsort(listTo, start, index-1)
global thesum
thesum = thesum + index-1-start
qsort(listTo, index+1, end)
thesum = thesum + end-index-1
在该方法中,thesum
没有被初始化到0
但原始阵列减1
您可能还需要知道的事情:
我正在执行的算法是quicksort的简单版本。我有一个列表,需要用这个程序进行排序。我使用全局变量来表示算法需要执行的总体比较。
的问题和问题
我认为这两种方法是等效的,但他们给了不同的答案。在通过打印thesum
进行了一些测试之后,我发现这个全局变量在函数qsort
中未按预期工作。 例如,当对10个元素的数组进行排序时,thesum
初始化为9,但后来打印为8,这很奇怪。 但是为什么?我将其声明为函数中的全局函数,它的用法与函数partition
中的方法相同。我能想到的所有差异是qsort
是一个递归函数。但是,这有什么不同?所以全局变量不应该用于递归函数中?
对于递归调用,您最好将作为参数添加到调用中。这可能不起作用,因为当你期待它的价值不是你所期望的。 – Jiminion
不应该在同一句子中使用全局和递归 –
在第一次调用qsort之前,您不应该更新(在方法#2中)的总数? – Jiminion