我用Python编写了一个quicksort程序,我的目标是计算使用的总比较。我声明了一个名为thesum
的全局变量。当我在分区函数中使用thesum
时,我可以正确计算thesum
。但是,当我试图计算递归函数中的和时,它给出了错误的答案。以下是我分别做的事情:
方法1:
计算分区函数中的总和:
def partition(listToSort, start, end):
global thesum
thesum = thesum+end-start
在我正在使用的分区算法中,我需要在分割m长度数组时添加m-1。
方法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
是一个递归函数。但这有什么不同呢?那么全局变量不应该用于递归函数吗?
答案 0 :(得分:0)
这两种方法没有执行等效的操作。