QuickSort on Singly Linked List – GeeksforGeeks

 

 

     class Node {

        constructor(val) {

            this.data = val;

            this.next = null;

        }

    }

 

    var head;

 

    function addNode(data) {

        if (head == null) {

            head = new Node(data);

            return;

        }

 

        var curr = head;

        while (curr.next != null)

            curr = curr.next;

 

        var newNode = new Node(data);

        curr.next = newNode;

    }

 

    function printList( n) {

        while (n != null) {

            document.write(n.data);

            document.write(" ");

            n = n.next;

        }

    }

 

    

    

    

    function paritionLast( start,  end) {

        if (start == end || start == null || end == null)

            return start;

 

        var pivot_prev = start;

        var curr = start;

        var pivot = end.data;

 

        

        

        

        while (start != end) {

            if (start.data < pivot) {

                

                pivot_prev = curr;

                var temp = curr.data;

                curr.data = start.data;

                start.data = temp;

                curr = curr.next;

            }

            start = start.next;

        }

 

        

        

        var temp = curr.data;

        curr.data = pivot;

        end.data = temp;

 

        

        

        return pivot_prev;

    }

 

    function sort( start,  end) {

        if (start == null || start == end || start == end.next)

            return;

 

        

        var pivot_prev = paritionLast(start, end);

        sort(start, pivot_prev);

 

        

        

        

        if (pivot_prev != null && pivot_prev == start)

            sort(pivot_prev.next, end);

 

        

        

        

        else if (pivot_prev != null && pivot_prev.next != null)

            sort(pivot_prev.next.next, end);

    }

 

    

     

        addNode(30);

        addNode(3);

        addNode(4);

        addNode(20);

        addNode(5);

 

        var n = head;

        while (n.next != null)

            n = n.next;

 

        document.write("Linked List before sorting<br/>");

        printList(head);

 

        sort(head, n);

 

        document.write("<br/>Linked List after sorting<br/>");

        printList(head);