private int Partition(int begin, int end) { dNode <T> pivot = GetNode(end); int i = begin - 1; for (int j = begin; j < end; j++) { if (GetNode(j).GetValue().CompareTo(pivot.GetValue()) < 0) { i++; Swap(i, j); } } Swap(i + 1, end); return(i + 1); }
//Swap two elements in the DLL public void Swap(int first, int second) { //If one of the elements is out of range throw exception if (first < 0 || second < 0 || first >= size || second >= size) { throw new System.ArgumentException("Index out of bounds", "original"); } //If elements are equal no swap required else if (first != second) { dNode <T> firstNode = GetNode(first); dNode <T> secondNode = GetNode(second); dNode <T> temp = new dNode <T>(firstNode.GetValue()); temp.next = firstNode.next; temp.prev = firstNode.prev; //If elements are consecutive if (firstNode.prev == secondNode) { if (secondNode.prev != null) { if (firstNode.next != null) { firstNode.next.prev = secondNode; } firstNode.prev = secondNode.prev; secondNode.prev.next = firstNode; secondNode.next = firstNode.next; secondNode.prev = firstNode; firstNode.next = secondNode; } else { if (firstNode.next != null) { firstNode.next.prev = secondNode; } secondNode.next = firstNode.next; secondNode.prev = firstNode; firstNode.next = secondNode; firstNode.prev = null; head = firstNode; } } else if (firstNode.next == secondNode) { Swap(second, first); } //If elements are different else { if (firstNode.prev != null) { dNode <T> firstPrev = firstNode.prev; firstPrev.next = secondNode; } else { head = secondNode; } if (firstNode.next != null) { dNode <T> firstNext = firstNode.next; firstNext.prev = secondNode; } else { tail = secondNode; } if (secondNode.prev != null) { dNode <T> secondPrev = secondNode.prev; secondPrev.next = firstNode; } else { head = firstNode; } if (secondNode.next != null) { dNode <T> secondNext = secondNode.next; secondNext.prev = firstNode; } else { tail = firstNode; } firstNode.next = secondNode.next; firstNode.prev = secondNode.prev; secondNode.next = temp.next; secondNode.prev = temp.prev; } } }