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;
}
有人可以幫助我!
之前設置的我到i.next,我認爲你必須檢查它是否是空已經 –
是現在我加入了空條件,然後還要它會無限循環 –
' \t \t \t而(j!=右){ \t \t \t \t如果(j.value