2016-06-16 61 views
0

我正在嘗試寫幾個小時的第一個快速排序算法,但仍然沒有得到正確的結果。目標是編寫一個用於排序數組的快速排序代碼。我想使用兩個函數:遞歸函數quick_sort和分區函數。第一個分區後快速排序不起作用

我發現分區函數看起來在分割和征服生成的每個子數組上都正常工作,但返回的總數組在第一個分區後似乎沒有改變(第一個分區有效,而第二個,第三個分區,...,似乎沒有效果)。

我一定錯過了這裏的任何提示?

def partition(a, first, last):  
    x = a[0] 
    j = 0 

    for i in range((first+1), (last+1)): 

     if x >= a[i]: 
      j = j + 1 
      a[i], a[j] = a[j], a[i]  
    a[0], a[j] = a[j], a[0] 

    return j 

def quicksort(a): 
    quick_sort(a, 0, len(a) - 1) 

def quick_sort(a, first, last): 

    if first < last:  
     j = partition(a, first, last) 
     # devide a into two parts and do quicksort respectively 
     quicksort(a[:j]) 
     quicksort(a[j+1:]) 

    return a 

a = [6.5, 4, 2, 3, 9, 8, 9, 4, 7, 6, 1] 
quicksort(a) 
+1

a [:j]是不同的數組,a複製。你應該使用quicksort(a,first,j),quicksort(a,j + 1,last) – UmNyobe

+0

這正是我錯過的地方!非常感謝UmNyobe – enaJ

回答

2

替換此

quicksort(a[:j]) 
quicksort(a[j+1:]) 

對於

quick_sort(a,first,j-1) 
quick_sort(a,j+1,last) 

既然你都呼籲quicksort(a)這個預訂購再做僅在第一次迭代,BC設置低和高的第一次迭代所有那麼爲了保存它,你應該調用遞歸的一個使用j