为了账号安全,请及时绑定邮箱和手机立即绑定

快速排序非递归

标签:
PHP

快速排序-非递归

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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
104
获赞与收藏
364

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消