通过交换双链表(Java)中的节点进行快速排序的分区功能

时间:2017-09-01 17:27:34

标签: 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;

    }

有人可以帮助我!

1 个答案:

答案 0 :(得分:0)

尝试编辑 i = i.next; (正好在// swap(i,j)之上)

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

这应该有效。