/// <summary> /// This method uses last element as pivot element for partitioning. /// </summary> /// <param name="head"></param> /// <param name="lastNode"></param> /// <returns></returns> private static DLLNode Partition(DLLNode head, DLLNode lastNode) { DLLNode current = head; DLLNode pivotNode = lastNode; DLLNode prev = null; int temp; while (current != pivotNode) { if (current.Data < pivotNode.Data) { prev = (prev == null) ? head : prev.Next; temp = current.Data; current.Data = prev.Data; prev.Data = temp; } current = current.Next; } prev = (prev == null) ? head : prev.Next; temp = prev.Data; prev.Data = pivotNode.Data; pivotNode.Data = temp; return(prev.Next); }
public void Display() { DLLNode temp = Head; while (temp != null) { Console.WriteLine(temp.Data); temp = temp.Next; } }
public DLLNode GetLastNode() { DLLNode temp = Head; while (temp.Next != null) { temp = temp.Next; } return(temp); }
public static void SortUtil(DLLNode head, DLLNode last) { if ((head == null) || (last == null) || (head.Next == last)) { return; } DLLNode pivotNode = Partition(head, last); SortUtil(head, pivotNode.Prev); SortUtil(pivotNode.Next, last); }
public void Push(int data) { if (Head == null) { Head = new DLLNode { Data = data }; } else { DLLNode newNode = new DLLNode { Data = data }; newNode.Next = Head; Head.Prev = newNode; Head = newNode; } }
public static void Sort(DLList dllList) { DLLNode lastNode = dllList.GetLastNode(); SortUtil(dllList.Head, lastNode); }