2012-09-11 94 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

相关问题