同期双方向リンク リストに QuickSort アルゴリズムを実装したいと考えています。関数「パーティション」に左右の境界線を指定すると、左側の低い値が検索され、右側に大きい値が配置されます。これが機能するのは、私のピボット要素が常に最も右側にあり、この手順の後は中央にあるためです。
いつもエンドレス ループになってしまいますが、その理由がわかりません。多分間違ったアボート条件?
彼女の私のコード:
private void quickSortRec(DoublyLinkedList in, ListElement l, ListElement r) {
    ListElement pivot = partition(in, l, r);
    if(pivot!=null && l!=r){
        quickSortRec(in, in.first, pivot.prev);
        quickSortRec(in, pivot.next, in.first.prev);
    }
}
public ListElement partition(DoublyLinkedList in, ListElement l, ListElement r){
    ListElement pivot = r;
    ListElement walker = l;
    if(l!=r){
        while(walker != pivot){
            if(walker.getKey() >= pivot.getKey()){
                System.out.println(walker.getKey());
                if(walker.prev == r){
                    l = walker.next;
                    r = walker;
                }
                else{
                    ListElement h1 = walker.prev;
                    ListElement h2 = walker.next;
                    h1.next = h2;
                    h2.prev = h1;
                    walker.prev = pivot;
                    walker.next = l;
                    pivot.next = walker;
                    l.prev = walker;
                    r = walker;
                }
            }
            walker = walker.next;
        }
        if(l.prev == r)
            in.first = l;
        ListElement p = in.first;
        do{
            System.out.print(p.toString()+" ");
            p = p.next;
        }while(p != in.first);
        System.out.println();
        return pivot;
    }
    return null;
}
}