/** * @param DoubleLinkedList $list * @return DoubleLinkedList */ public function quickSort(DoubleLinkedList $list) { $listToReturn = new DoubleLinkedList(); $smallerList = new DoubleLinkedList(); $biggerList = new DoubleLinkedList(); $current = $list->getBottom(); if (!$current) { return $listToReturn; } $pivot = $current->getData(); $listToReturn->add($pivot); while ($current) { if ($current->getData() < $pivot) { $smallerList->add($current->getData()); } elseif ($current->getData() > $pivot) { $biggerList->add($current->getData()); } $current = $current->getNext(); } $sortedFirst = $this->quickSort($smallerList); $sortedSecond = $this->quickSort($biggerList); $listToReturn = $this->append($sortedFirst, $listToReturn); $listToReturn = $this->append($listToReturn, $sortedSecond); return $listToReturn; }