Пример #1
0
        /// <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);
        }
Пример #2
0
        public void Display()
        {
            DLLNode temp = Head;

            while (temp != null)
            {
                Console.WriteLine(temp.Data);
                temp = temp.Next;
            }
        }
Пример #3
0
        public DLLNode GetLastNode()
        {
            DLLNode temp = Head;

            while (temp.Next != null)
            {
                temp = temp.Next;
            }

            return(temp);
        }
Пример #4
0
        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);
        }
Пример #5
0
 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;
     }
 }
Пример #6
0
        public static void Sort(DLList dllList)
        {
            DLLNode lastNode = dllList.GetLastNode();

            SortUtil(dllList.Head, lastNode);
        }