所以我要使用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
答案 0 :(得分:0)
您没有任何修改传入的List对象的代码。您阅读列表并使用它创建一个新列表然后进行排序。如果您的所有排序代码都有效(我还没有检查)您可以将列表传递给internalMergeSort并删除生成inputArray的代码