Java 如何对字符串数组列表进行合并排序

Java 如何对字符串数组列表进行合并排序,java,sorting,Java,Sorting,所以在过去的几天里,我一直在试图找出这个代码,但我一无所获。这是我得到的最远的结果,但现在它没有显示最终排序的数组,我尝试添加的任何代码都显然无法访问return merged语句:/ import java.util.*; public class MergeTestStringArray { public static void main(String[] args) { ArrayList< String > array = new ArrayList&l

所以在过去的几天里,我一直在试图找出这个代码,但我一无所获。这是我得到的最远的结果,但现在它没有显示最终排序的数组,我尝试添加的任何代码都显然无法访问return merged语句:/

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;


  }

}
import java.util.*;
公共类MergeTestStringArray
{
公共静态void main(字符串[]args)
{
ArrayListarray=新的ArrayList();
数组。添加(“John”);
数组。添加(“Victor”);
数组。添加(“Joe”);
数组。添加(“Jackson”);
数组。添加(“Anthony”);
数组。添加(“Angelina”);
数组。添加(“乔治”);
数组。添加(“Paul”);
ArrayListSorterDarray=新的ArrayList();
SorterDarray=合并排序(数组);
对于(int i=0;imergeSort(ArrayListlist)
{
ArrayListsorted=新的ArrayList();
if(list.size()==1)
{
排序=列表;
}否则{
int mid1=list.size()/2;
ArrayListleft=新的ArrayList();
ArrayListright=新的ArrayList();
对于(int x=0;xmergeArray(ArrayListleft,ArrayListright)
{
ArrayListmerged=新的ArrayList();
int i=0;
int l=0;
int r=0;
而(l
不确定您的问题是什么,但是。。返回语句之后的语句通常是不可访问的。函数到达return语句后,它将存在函数并在该return语句处返回值

您的错误在mergeSort函数中。具体地说,在递归情况下,您永远不会将排序结果实际保存到
合并的
列表中。试着替换

mergeArray(left,right);


mergeArray
的返回值分配给
sorted

sorted = mergeArray(left,right);
并分配mergeSort调用的结果:

        left = mergeSort(left);
        right = mergeSort(right);
另外,在不打算使用变量时,不需要创建空的ArrayList来声明变量

以下几点就足够了:

ArrayList < String > sorted;
ArrayList排序;

好的,除了排序不完美外,它将数组排序为:Anthony Angelina George John Paul Victor Joe Jackson(快到了),但不完全正确,我还应该实现什么来对其进行完美排序?如果这是家庭作业,你应该使用家庭作业标签。谢谢,但是,它仍然没有正确排序:/有什么想法吗?当前输出为:Anthony Angelina George John Paul Victor JoeJackson@amartin94这有一个很好的理由,请参见编辑后的答案。未正确分配函数的结果。这是一个如何工作的问题吗?不,只是想更好地理解mergeSort的工作原理-我将在接下来的作业中使用某种排序,但目前我正试图更好地理解mergeSort的工作原理works@amartin94很公平。您理解为什么需要将两个mergeSort()调用的结果分配回左和右吗?不完全理解:/mergeSort的整个概念对我来说很难。。但是谢谢你的帮助
ArrayList < String > sorted;