0

我用 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是一个递归函数。但这有什么不同呢?那么全局变量不应该在递归函数中使用吗?

4

1 回答 1

0

这两种方法不执行等效的操作。

于 2013-07-22T16:55:04.437 回答