但是不知道如何实现递归,了解了通过把两个左右数组merge一下,还是傻傻搞不明白。
请教各位,帮忙把代码优化下,或者贴下结果。谢谢~
$tmpb){ echo $arr[$j],比,$tmpb,大 go on ,\n; --$j; echo '$j',减1,下标为,$j,值为--;echo $arr[$j].\n; echo '现在数组为',\n; var_dump($arr); } // 如果这个值比pivot小了,那么就交换,然后从开始到左边找 if($arr[$j]$tmpb){ echo $arr[$i],'比',$tmpb,'大了,交换'; swap($arr[$i],$arr[$j]); --$j; echo '$j',减1,下标为,$j,值为--;echo $arr[$j].\n; echo '现在数组为',\n; var_dump($arr); echo 在从右边边开始; echo '再走一层最外层while',\n; }} return $arr;}$result=quicksort($arr);echo ========================,最终结果为\n;var_dump($result);
执行的结果我贴一下:
========================最终结果为
array (
0 => 23,
1 => 13,
2 => 51,
3 => 57,
4 => 26,
5 => 66,
6 => 81,
7 => 69,
8 => 76,
)他只是按找66分成了左右两部分,结合我上面的思路,怎么能递归呢?
回复内容: 我想实现php下的递归,下面这段代码只能实现第一次排序,
但是不知道如何实现递归,了解了通过把两个左右数组merge一下,还是傻傻搞不明白。
请教各位,帮忙把代码优化下,或者贴下结果。谢谢~
$tmpb){ echo $arr[$j],比,$tmpb,大 go on ,\n; --$j; echo '$j',减1,下标为,$j,值为--;echo $arr[$j].\n; echo '现在数组为',\n; var_dump($arr); } // 如果这个值比pivot小了,那么就交换,然后从开始到左边找 if($arr[$j]$tmpb){ echo $arr[$i],'比',$tmpb,'大了,交换'; swap($arr[$i],$arr[$j]); --$j; echo '$j',减1,下标为,$j,值为--;echo $arr[$j].\n; echo '现在数组为',\n; var_dump($arr); echo 在从右边边开始; echo '再走一层最外层while',\n; }} return $arr;}$result=quicksort($arr);echo ========================,最终结果为\n;var_dump($result);
执行的结果我贴一下:
========================最终结果为
array (
0 => 23,
1 => 13,
2 => 51,
3 => 57,
4 => 26,
5 => 66,
6 => 81,
7 => 69,
8 => 76,
)他只是按找66分成了左右两部分,结合我上面的思路,怎么能递归呢?
`
public static function quicksort( $numarr ){ $minarr = []; $maxarr = []; $randkey = array_rand( $numarr ); $basenum = $numarr[$randkey]; unset( $numarr[$randkey] ); foreach ( $numarr as $num ) { if ( $num >= $basenum ) $maxarr[] = $num; else $minarr[] = $num; } if ( count( $maxarr ) > 1 ) $maxarr = self::quicksort( $maxarr ); if ( count( $minarr ) > 1 ) $minarr = self::quicksort( $minarr ); return array_merge( $minarr, [$basenum], $maxarr );}`
我是这么做的
