2017-09-01 33 views
0

我嘗試使用java中的雙向鏈表來編寫快速排序代碼。我不知道爲什麼我的分區函數進入無限循環。這是我的代碼。我試圖通過交換雙向鏈表的節點(而不是數據)來完成分區過程。通過在雙向鏈表(Java)中交換節點進行快速排序

Node partition(Node left, Node right){ 

     Node i = left.prev; 
     Node pivot = right; 
     Node j = left; 
     while(j!= right){ 
      if(j.value<=pivot.value){ 
       i = i.next; 
       //swap(i,j) 
       Node prevI = i.prev; 
       Node prevJ = j.prev; 
       Node nextI = i.next; 
       Node nextJ = j.next; 

       prevI.next = j; 
       j.prev = prevI; 
       j.next = nextI; 

       prevJ.next = i; 
       i.prev = prevJ; 
       i.next = nextJ; 


      } 

      j = j.next; 

     } 

     // i+1 th node is the correct place for the pivot. so swap pivot and (i+1)th node 

     if(i==null){ 
      i = left; 
     } 
     else{ 
      i = i.next; 
     } 
     Node iPrev = i.prev; 
     Node pivotNext = pivot.next; 
     Node pivotStore = pivot; 
     Node pivotPrev = pivot.prev; 

     pivot = i; 
     pivot.next = i.next; 
     pivot.prev = i.prev; 
     left.prev = pivot; 

     i = pivotStore; 
     pivotPrev.next = i; 
     i.prev = pivotPrev; 
     i.next = pivotNext; 

    return i; 

    } 

有人可以幫助我!

+0

之前設置的我到i.next,我認爲你必須檢查它是否是空已經 –

+0

是現在我加入了空條件,然後還要它會無限循環 –

+0

' \t \t \t而(j!=右){ \t \t \t \t如果(j.value

回答

0

嘗試編輯 i = i.next; (i,j)

與 if(i == null){i = left; } else {i = i.next; }

這應該工作。

+1

我已嘗試過..它不工作的代碼。 –