php实现快速排序

php实现快速排序

快速排序:这个算法是参考百度百科的C语言的代码,没有参考php的代码,因为php的代码虽然思路简单,但是中间需要开好得多数组,太过于耗内存。

先获取第一个值为关键字,让i指向第一个,j指向最后一个,先从最后一个找比key小的,j指向它,将它放在i指向的地方,然后i再向前走,直到找到比key大的,放在j指向的地方,就这样循环,直到i=j的时候,关闭循环。

<?php
    $arr=array(1,2,3,5,2,3,9,8,3,2,7,4,9,8,0,4,587,93,47,59,8,2,6,83,4,9,65,2,18,7);
    printArr($arr);
    function quick(&$arr,$left,$right){
        if($left<$right){    //设置递归在这里停下来
            $key=$arr[$left];    //获取关键值
            $i=$left;        //左指针
            $j=$right;        //右指针
            while($i<$j){
                while($j>$i && $key<=$arr[$j])
                    $j--;
                $arr[$i]=$arr[$j];
                while($i<$j && $key>=$arr[$i])
                    $i++;
                $arr[$j]=$arr[$i];
            }
            $arr[$j]=$key;    //关键的就是这里,这个必须要把最后的值给$i为下标的数组值
            quick($arr,$left,$j);
            quick($arr,$j+1,$right);
        }
    }
    quick($arr,0,count($arr)-1);
    printArr($arr);
    function printArr($arr){
        for($i=0;$i<count($arr);$i++)
            echo ' '.$arr[$i];
        echo "\n";
    }
?>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值