Beispiel #1
0
 /**
  * @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;
 }