Java中的MergeSort返回输入

时间:2014-05-07 03:59:12

标签: 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 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

1 个答案:

答案 0 :(得分:0)

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