Loading

PHP实现快速排序

快速排序

思想:从数组中选一个数字作为基准数字,然后将数组进行遍历,比此数大的数字放一个数组里,比此数小的数字放另一个数组里。然后递归调用,最终合并数组。

特点:最坏的时间复杂度为O(n^2),不稳定,例如下面的2个相同数字5,谁排前后不确定。

<?php declare(strict_types=1);

function quickSort(array $aNum): array
{
   $iLen = count($aNum);
   if ($iLen > 1) {
       $iNum = $aNum[0];
       $aLow = [];
       $aHigh = [];
       for ($i = 1; $i < $iLen; $i++) {
           $aNum[$i] >= $iNum ? array_push($aHigh, $aNum[$i]) : array_push($aLow, $aNum[$i]);
       }
       $aLow = quickSort($aLow);
       $aHigh = quickSort($aHigh);

       return array_merge($aLow, [$iNum], $aHigh);
   }

   return $aNum;
}

print_r(quickSort([2, 5, 3, 78, 5, 8]));

posted @ 2021-03-13 14:43  哈利路亚健儿奋起步伐  阅读(89)  评论(0编辑  收藏  举报