快速排序-非递归
function FindPv(&$arr, $s, $e){
$p = $s; //基准起始位置
$v = $arr[$p]; //将数组的第一个值作为基准值
while($s <$e){
while($arr[$e]>$v&&$e>$p){
$e--;
}
$arr[$p] = $arr[$e];
$p = $e;
while($arr[$s]<$v&&$s<$p){
$s++;
}
$arr[$p] = $arr[$s];
$p = $s;
}
$arr[$p] = $v;
return $p;
}
function PvSort(&$arr){
$stack = array();
array_push($stack,array(0,count($arr)-1));//初始化
while(count($stack)>0){
$temp = array_pop($stack);
$p = FindPv($arr, $temp[0], $temp[1]);
if($p+1<$temp[1]) array_push($stack,array($p+1,$temp[1]));
if($temp[0]<$p-1) array_push($stack,array($temp[0],$p-1));
}
}
$arr = array(10,6,8,23,4,1,17,56,32,50,11,9);//12个数
echo '<pre>';
PvSort($arr);
print_r($arr);
打开App,阅读手记