我尝试在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 :(得分:0)
尝试编辑 i = i.next; (正好在// swap(i,j)之上)
与 if(i == null){i = left; } else {i = i.next; }
这应该有效。