继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

快速排序非递归

weiyihigh
关注TA
已关注
手记 51
粉丝 104
获赞 364

快速排序-非递归

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,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP