快速排序-非递归
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);
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦