<?php /** * 快速排序 --主要运用递归, 先把一个数找准位置,然后再递归把左右两边的数都找准位置 */ function QSort($a= []){ $nCount = count($a); if(($nCount) < 1){ return $a; } // 一般默认找最左边的为起始点。 $nTarget = $a[0]; $aLeft = $aRight = []; //从起始点后面选第一个开始 for($i=1; $i<$nCount; $i++){ if($a[$i] >= $nTarget){ // 从大到下 $aLeft[] = $a[$i]; }else{ $aRight[] = $a[$i]; } } // 排完一次后,递归调用此方法,让左边和右边排序。 $aLeft = QSort($aLeft); $aRight= QSort($aRight); return array_merge($aLeft,[$nTarget], $aRight); } $a = [120,2,500,3,34,1,700]; var_dump(QSort($a));