2014-05-07 45 views
-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 

回答

0

你沒有這樣的修改,你在通過List對象的任何代碼。您閱讀列表,並用它來你排序,然後創建一個新的列表。如果您的所有排序代碼都可以工作(我沒有選中)您可以將列表傳遞給internalMergeSort並刪除生成inputArray的代碼

+0

謝謝!好吧,所以我改變它來修改列表的內容到排序的內容。而且他們像部分重複分類一樣,我不知道現在爲什麼會發生這種情況。 – nickfhs

+0

我修好了!謝謝! – nickfhs