算法-空间复杂度大O1的快速排序
不考虑占用空间的大小
比较简单
$arr = [1,3,2,6,7,8,6,5,4,2,2,2,2,2,0,0,0,0,0,0,0,0,0];
function q( $arr ){
//排除极限情况
$len = count($arr);
if($len <= 1){
return $arr;
}
$mid = $arr[0];
$right = [];
$left = [];
for( $i = 1 ; $i <= $len-1 ; $i ++ ){
if($mid <= $arr[$i]){
$right[] = $arr[$i];
}else{
$left[] = $arr[$i];
}
}
return array_merge(q($left),[$mid],q($right));
}
var_dump(q($arr));
空间复杂度限制在O(1)这个有点费劲
$arr = [1,3,2,6,7,8,6,5,4,2,2,2,2,2,0,0,0,0,0,0,0,0,0];
function q( &$arr , $s , $e ){
//排除极限情况
if ( $e <= $s){
return ;
}
$mid = $arr[$s];
$i = $s+1;
for( ; $i <= $e ;$i++ ){
if( $arr[$i] >= $mid ){
for( $j = $e ; $j >= $i ; $j-- ){
if($j == $i){
break 2;
}
if( $arr[$j] < $mid ){
$t = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $t;
break 1;
}
}
}
}
$td = $arr[$i - 1];
$arr[$i - 1] = $mid;
$arr[$s] = $td;
q($arr , $s , $i - 1);
q($arr , $i , $e );
}
q( $arr , 0 , count($arr) - 1 );
var_dump($arr);