2012-11-12 66 views
0

我嘗試使用java中的快速排序算法以字典順序對Strings的數組進行排序。該陣列通過終端使用Scanner讀入並保存在ArrayList中。這個ArrayList後來被轉換爲一個數組,我試着在其上應用快速排序算法。 我有兩種方法:字典快速排序

private static void sortA(String[] s, int start, int end) { 
    if (end > start) { 
     int pivot = partition(s, start, end); 
     sortA(s, start, pivot - 1); 
     sortA(s, pivot + 1, end); 
    } 
} 

private static int partition(String[] s, int start, int end) { 
    String pivot = s[end]; 
    int left = start; 
    int right = end; 
    String temp = ""; 
    do { 
     while ((s[left].compareTo(pivot) <= 0) && (left < end)) 
      left++; 
     while ((s[right].compareTo(pivot) > 0) && (right > start)) 
      right--; 
     if (left < right) { 
      temp = s[left]; 
      s[left] = s[end]; 
      s[right] = temp; 
      printRow(s); 

     } 
    } while (left < right); 
    temp = s[left]; 
    s[left] = s[end]; 
    s[end] = temp; 
    return left; 
} 

代碼似乎隨機做工精細,然後突然沒有。例如,陣列{"java", "application", "system"}可以很好地分類到{"application", "java", "system"}。數組{"library", "content", "bin"}排序爲{"bin", "library", "contents"},這不是字典順序。當然,電腦不會隨機工作,所以我的代碼一定有問題。我試圖在紙上制定一個例子,但是我會發現一些完全錯誤的東西。但是,我基於快速排序實現了一個雙數組排序實現,所以我不認爲我犯了一個很大的推理錯誤。 在此先感謝。

回答

1

要拆分陣列中的錯誤的方式: 正確的分裂是「支點-1」,「轉動」

sortA(s, start, pivot-1); 
sortA(s, pivot, end); 
+0

謝謝!它現在看起來很有效。我犯了這樣一個愚蠢的錯誤......我儘快接受答案! –