Apply Quick sort algorithm to Doubly linked list by changing nodes

匆匆过客 提交于 2019-12-02 14:35:39

This is how I do it.

public Node getLast(Node head) {
    Node current = head;
    while(current.next != null) {
        current = current.next;
    }

    return current;
}

public void sort() {
    Node la = getLast(head);
    quickSort(head, la);
    head = actualHead;
}

public void quickSort(Node head, Node last) {

    if(head == last)
        return;
    if(head == null || last == null)
        return;
    if(last.next == head)
        return;

    Node partition = partition(head, last);

    Node newHead = this.head;
    Node newTail = this.last;


    quickSort(newHead, partition.prev);

    if(actualHead == null)
    {
        actualHead = newHead;
    }

    quickSort(partition.next, newTail);

}

public Node partition(Node head, Node last) {
    Node current = head;
    Node p = last;

    while(current != p) {

        if(current.data > p.data) {
            Node next = current.next;
            current.next.prev = current.prev;
            if(current.prev != null)
                current.prev.next = current.next;
            current.next = last.next;
            current.prev = last; 
            last.next = current;

            if(current == head)
                head = next;
            last = current;
            current = next;
        }
        else {
            current = current.next;

        }
    }
    this.head = head;
    this.last = last;
    return p;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!