Java中的MergeSort返回输入
因此,我将使用ArrayList实现MergeSort。这是我的代码,但它只是返回用户输入的内容。调用的方法/类都是正确的。它读取给定的文本文件,然后将每一行放入一个列表,然后将列表传递给这个(我的)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
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的代码谢谢!好的,所以我将其更改为将列表的内容修改为已排序的内容。它们就像是部分排序的,有很多重复项,我不确定现在为什么会发生这种情况。我修复了它!谢谢!