-1
所以我來實現歸併使用的ArrayList(一個或多個)。這是我的代碼,但它只是返回用戶放入的內容。調用的方法/類都是正確的。它從給定的文本文件讀取,然後將每行放入列表中,然後將列表傳遞給此(我的)MergeSort類。歸併在Java返回輸入
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
謝謝!好吧,所以我改變它來修改列表的內容到排序的內容。而且他們像部分重複分類一樣,我不知道現在爲什麼會發生這種情況。 – nickfhs
我修好了!謝謝! – nickfhs