2011-09-17 28 views
1

這是我在java中爲雙向鏈表執行插入排序。我檢查了很多值,它給了我正確的輸出。我的問題是:我執行的插入排序

  1. 我不知道如何計算算法的時間爲這個我的意思是爲O(n)
  2. 可以這樣進行優化?任何人都可以指向更優化的代碼嗎?

注:代碼使用前哨淋巴結爲指向啓動鏈表即定點node.next點開始鏈表和定點node.PREV點的節點到鏈表頭指向前哨淋巴結的最後一個節點。

public void sortInsertionAsce(){ 
      DListNode marker,aheadOfCurrent;; 
      DListNode current = head.getNext(); 
      aheadOfCurrent = current.getNext(); 
      marker=current; 
      while(aheadOfCurrent.getNext()!=current){ 
      if(marker.getItem()>aheadOfCurrent.getItem()){ 
       swap(aheadOfCurrent,marker); 
       marker=aheadOfCurrent; 
        while(aheadOfCurrent.getPrev()!=current){ 
         aheadOfCurrent=aheadOfCurrent.getPrev(); 
         if(aheadOfCurrent.getPrev().getItem()>aheadOfCurrent.getItem()){ 
          swap(aheadOfCurrent.getPrev(),aheadOfCurrent); 
         } 
        } 
        aheadOfCurrent=marker; 
       } 
        marker=aheadOfCurrent; 
        aheadOfCurrent=aheadOfCurrent.getNext(); 
      } 
     } 
+0

我是新來的鏈接列表,並希望從某人誠實的意見。此代碼有效。只是想知道這是否可以優化。 – sreeprasad

+1

這是[CodeReview](http://codereview.stackexchange.com/)的問題。 –

+1

@LeeAllan你知道這個問題是四歲,我希望?我認爲你推薦Code Review有點遲... –

回答

0

它是O(N^2),因爲有1個嵌套循環。和所有2循環遍歷所有列表