2012-09-11 34 views
1

所以我一直想弄清楚這個代碼在過去幾天現在和即時通訊無處可尋。這是最遠的我已經有了,但現在它不顯示最後的排序陣列,任何代碼我嘗試,並添加過去的收益合併聲明顯然是unereachable:/如何MergeSort一個字符串ArrayList

import java.util.*; 

public class MergeTestStringArray 
{ 


    public static void main(String[] args) 
    { 
    ArrayList<String> array = new ArrayList<String>(); 

    array.add("John"); 
    array.add("Victor"); 
    array.add("Joe"); 
    array.add("Jackson"); 
    array.add("Anthony"); 
    array.add("Angelina"); 
    array.add("George"); 
    array.add("Paul"); 

    ArrayList<String> sortedArray = new ArrayList<String>(); 

    sortedArray = mergeSort(array); 

    for (int i = 0; i < sortedArray.size(); i++) 
    { 
     System.out.println(" " + sortedArray.get(i)); 
    } 
    } 

    public static ArrayList<String> mergeSort(ArrayList<String> list) 
    { 
    ArrayList <String> sorted = new ArrayList<String>(); 
    if (list.size() == 1) 
    { 
     sorted = list; 
    } else { 
     int mid1 = list.size() /2; 

     ArrayList<String> left = new ArrayList<String>(); 
     ArrayList<String> right = new ArrayList<String>(); 

     for (int x = 0; x < mid1; x++) { 
      left.add(list.get(x)); 

     } 
     for (int x = mid1; x < list.size(); x++) { 
      right.add(list.get(x)); 
     } 

     System.out.println("Left Array: " + left); 
     System.out.println("Right Array)" + right); 

     mergeSort(left); 
     mergeSort(right); 
     mergeArray(left,right); 
    } 

    return sorted; 
    } 

private static ArrayList<String> mergeArray(ArrayList<String> left, ArrayList<String> right) 
{ 
    ArrayList<String> merged = new ArrayList<String>(); 

    int i = 0; 
    int l = 0; 
    int r = 0; 

    while (l < left.size() && r < right.size()) 
      { 
       if ((left.get(l)).compareTo(right.get(r)) < 0) 
       { 
       merged.add(left.get(l)); 
       l++; 
       } 
       else 
       { 
       merged.add(right.get(r)); 
       r++; 
       } 

       i++; 
      } 


      while (l < left.size()) 
      { 
       merged.add(left.get(l)); 
       l++; 
       i++; 
      } 

      // Append rest of the values in the right half, if any... 
      while (r < right.size()) 
      { 
       merged.add(right.get(r)); 
       r++; 
        i++; 
      } 

    return merged; 


    } 

} 
+1

如果這是家庭作業,應使用作業標籤。 – Bill

回答

1

不知道你的問題是什麼,但return語句後的語句通常無法訪問。一旦函數達到return語句,它將存在該函數並返回該語句的返回值。

+0

呵呵,還好,對於:) – amartin94

1

您的錯誤出現在您的mergeSort函數中。具體來說,在你的遞歸情況下,你永遠不會將排序的結果保存到merged列表中。試着用

sorted = mergeArray(left,right); 
+0

好吧這樣的作品,除了分揀心不是完美的感謝,它排序的數組: 安東尼 安吉麗娜 喬治 約翰·保羅 維克多 喬 傑克遜 快到了,但不完全,我還應該執行什麼來完美分類? – amartin94

0

更換

mergeArray(left,right); 

mergeArray的返回值賦給sorted

sorted = mergeArray(left,right); 

並分配歸併調用的結果:

 left = mergeSort(left); 
     right = mergeSort(right); 

而且,你不必創建一個空的ArrayList來聲明一個變量,當你不打算使用它。

以下就足夠了:

ArrayList <String> sorted; 
+0

謝謝,但是,它仍然沒有正確排序:/有什麼想法爲什麼?電流輸出是:安東尼 安吉麗娜 喬治 約翰·保羅 維克多 喬 傑克遜 @ – amartin94

+0

有amartin94是一個很好的理由,見編輯答案。您的功能的結果未被正確分配。這是一個虛擬工作嗎? – IceMan

+0

不,只是試圖更好地理解mergeSort的工作方式 - 我將使用某種排序方式來分配一個任務,但此刻我試圖更好地瞭解mergeSort的工作原理 – amartin94

相關問題