2011-10-25 56 views
0

我有排序我的鏈表有問題任何人都可以幫助我,讓我知道我做錯了什麼? 我需要排序並將其放入列表中。 和如果你可以給我一些指針,以最後用新方法public void print()打印列表。排序LinkedList

public class SortedLinkedList<T extends Comparable<? super T>> 
      extends LinkedList<T> 
    { 
     private LinkedList<T> list; //the sorted list 

     //the constructor 
     public SortedLinkedList(LinkedList<T> in) 
     { 
      if(in.isEmpty()) 
      { 
       System.out.println("Empty list"); 
      } 
      else 
      { 
       LinkedList<T> first = new LinkedList<T>(in.subList(0, in.size()/2)); 
       LinkedList<T> second = new LinkedList<T>(in.subList(in.size ()/2,in.size())); 
       LinkedList<T> sortList = new LinkedList<T>(); 

       int i = 0; 
       int j = 0; 
       while(i<first.size() && j<second.size()) 
       { 
        if(first.get(i).equals(second.get(j)) || first.get(i).compareTo(second.get(j))<0) 
        { 
          sortList.add(first.get(i)); 
          i++; 
        } 
        else 
        { 
          sortList.add(second.get(j)); 
          j++; 
        } 
        if(i == first.size()) 
        { 
          for(int k = j; k<second.size(); k++) 
          { 
           sortList.add(second.get(k)); 
          } 
        } 
        else 
        { 
          for(int x = i; x<first.size(); x++) 
          { 
           sortList.add(first.get(x)); 
        } 
       } 

      } 
     } 
    } 
    } 
+2

請描述發生的事情與您預期會發生的事情;只是說「有問題」是沒有用的。此外,如果這是作業,請將其標記爲:) –

回答

2

在編寫自己的排序嘗試Collections.sort。如果您需要自己的排序順序,請使用比較器。

一些增加:在大多數情況下,LinkedLists是錯誤的數據結構 - 尤其是如果需要對它進行排序的話。

+0

+1爲了就選擇正確的數據結構 – PaoloVictor

1

看來你正試圖實施Mergesort。如果我的假設是正確的,那麼你忘記在子列表上調用mergesort.recursively。粗糙的算法,在僞代碼,將是:

mergesort(list) 
    left = list[:len(list/2)] 
    right = list[len(list/2):] 

    mergesort(left) 
    mergesort(right) 

    merge(left, right) # that would be your while loop 

編輯:除非你真的需要實現自己的算法從Java API,我建議使用Collections.sort