2013-07-22 74 views
0

我用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是一個遞歸函數。但是,這有什麼不同?所以全局變量不應該用於遞歸函數中?

+1

對於遞歸調用,您最好將作爲參數添加到調用中。這可能不起作用,因爲當你期待它的價值不是你所期望的。 – Jiminion

+2

不應該在同一句子中使用全局和遞歸 –

+0

在第一次調用qsort之前,您不應該更新(在方法#2中)的總數? – Jiminion

回答

0

這兩種方法沒有執行等效操作。