Java中的MergeSort返回输入

Java中的MergeSort返回输入,java,recursion,mergesort,Java,Recursion,Mergesort,因此,我将使用ArrayList实现MergeSort。这是我的代码,但它只是返回用户输入的内容。调用的方法/类都是正确的。它读取给定的文本文件,然后将每一行放入一个列表,然后将列表传递给这个(我的)MergeSort类 import java.lang.Comparable; import java.util.List; import java.util.ArrayList; public class Merge12 implements Sort12 { public <T exte

因此,我将使用ArrayList实现MergeSort。这是我的代码,但它只是返回用户输入的内容。调用的方法/类都是正确的。它读取给定的文本文件,然后将每一行放入一个列表,然后将列表传递给这个(我的)MergeSort类

import java.lang.Comparable;
import java.util.List;
import java.util.ArrayList;
public class Merge12 implements Sort12
{
public  <T extends Comparable<? super T>> void  sort(List<T> list)
{
    if ( list == null )
         throw new NullPointerException("Null argument to sort");

    // Create the arrayList to insert into
    ArrayList<T> inputArray = new ArrayList<T>(list.size());
    ArrayList<T> tempArray = new ArrayList<T>(list.size());

    for(int i = 0; i < list.size(); i++)
        inputArray.add(list.get(i));
    int first = 0, last = inputArray.size()-1;

    internalMergeSort(inputArray, tempArray, first, last);
}
private  <T extends Comparable<? super T>> void 
    internalMergeSort(ArrayList<T> inputArray, ArrayList<T> tempArray,
                int first, int last)
{
    if( ( last - first + 1) <= 1)
        return;

    int mid = ( ( first + last + 1 ) / 2);
    internalMergeSort(inputArray, tempArray, first, mid - 1);
    internalMergeSort(inputArray, tempArray, mid, last);
    merge(inputArray, tempArray, first, mid, last);
} // internalMergeSort

private  <T extends Comparable<? super T>> void 
    merge(ArrayList<T> inputArray, ArrayList<T> tempArray,
                int first, int mid, int last)
{
    int insertIndex = first;
    int index1 = 0;
    int index2 = mid;

    for(int i = 0, j = first; i < (index2 - first); i++, j++)
        tempArray.add(inputArray.get(j));

    while ((index1 < (mid - first)) && (index2 <= last)) {
        if(tempArray.get(index1).compareTo(inputArray.get(index2)) < 0) {
            inputArray.set(insertIndex, tempArray.get(index1));
            index1++;
        }
        else {
            inputArray.set(insertIndex, inputArray.get(index2));
            index2++;
        }
        insertIndex++;
    }

    while(index1 < (mid - first)) {
        inputArray.set(insertIndex, tempArray.get(index1));
        index1++;
        insertIndex++;
    }
} // Merge
}
// vim:ts=4:sw=4:sw=78
import java.lang.Comparable;
导入java.util.List;
导入java.util.ArrayList;
公共类Merge12实现Sort12
{

public您没有任何代码可以修改传入的列表对象。您可以读取列表并使用它创建一个新列表,然后进行排序。如果所有排序代码都有效(我没有选中)您可以将列表传递给internalMergeSort,并删除生成inputArray的代码

谢谢!好的,所以我将其更改为将列表的内容修改为已排序的内容。它们就像是部分排序的,有很多重复项,我不确定现在为什么会发生这种情况。我修复了它!谢谢!