我用 Python 编写了一个快速排序程序,我的目标是计算使用的总比较。我声明了一个名为thesum
. 当我thesum
在分区函数中使用时,我可以thesum
正确计算。但是,当我尝试计算递归函数中的总和时,它给出了错误的答案。以下是我分别做的:
方法一:
计算配分函数中的总和:
def partition(listToSort, start, end):
global thesum
thesum = thesum+end-start
在我正在使用的分区算法中,我需要在对 m 长度数组进行分区时添加 m-1。
方法二:
计算递归函数 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。
您可能还需要知道的事情:
我正在实现的算法是快速排序的简单版本。我有一个列表,需要用这个程序对其进行排序。我使用一个全局变量来表示算法需要执行的总比较。
问题和疑问
我认为这两种方法是等效的,但它们给出了不同的答案。经过一些打印测试后thesum
,我发现这个全局变量在函数中没有按预期工作qsort
。例如,在对 10 元素数组进行排序时,thesum
初始化为 9,但后来打印为 8,这很奇怪。但为什么?我在函数中将它声明为全局,并且它的使用方式与在函数中相同partition
。我能想到的所有区别是它qsort
是一个递归函数。但这有什么不同呢?那么全局变量不应该在递归函数中使用吗?