2014-02-08 63 views
0

我寫了這個快速排序算法的實現。 理論上,quicksort應該使用任何支點,但我的代碼無法正確排序數組。快速排序:算法只適用於特定的關鍵

如果我使用l作爲支點算法的工作原理,但我無法理解爲什麼它不能使用h。任何想法?

public ArrayList<Integer> sort(ArrayList<Integer> array, int l, int h){ 
    if ((h - l) > 0){ 
     int splitPoint = partition(array, l, h); 
     sort(array, l, splitPoint); 
     sort(array, splitPoint +1, h); 
    } 
    return array; 
} 

public int partition(ArrayList<Integer> array, int l, int h) { 
    int p = h; //with int p = l; the algorithm works 
    Integer pivot = array.get(p); 

    while(l<h) { 
     for (; h>l && array.get(h).compareTo(pivot) >= 0; h--); 
     for (; l<h && array.get(l).compareTo(pivot) < 0; l++); 

     swap(array, l, h); 
    } 
    return h; 
} 
+0

我們無法告訴您您沒有向我們展示過的實施有什麼問題。在我們可以確切地告訴你你做錯了什麼之前,你必須向我們展示工作和非工作版本。 – RBarryYoung

+0

@RBarryYoung我試圖重寫我的問題,我把錯誤的代碼 – drolando

回答

0

您可以使用您現有的算法。

如果要選擇另一個數據透視表,請將其交換到partition中的第一個位置。

+0

我的問題有點不同:是否有可能編寫一個快速排序算法的實現,使用任何元素作爲樞軸工作? – drolando

+0

是的,我剛剛向你介紹*如何做到這一點。 –

+0

有什麼問題? –