php:快速排序的两种方法

//$data=array(23,16,2,36,34,3,9,67,54);

//$ref=$data[0];
//$count=count($data)-1;
//qksort($data,0,$count);

//$arr=other_qksort($data);
//echo "<pre>";
//var_dump($arr);
//echo "</pre>";
function quickSort($arr){
       $len = count($arr);
       if($len <= 1) {
           return $arr;
       }
       $key = $arr[0];
       $left_arr    = array();
       $right_arr    = array();
       
       for($i=1; $i<$len; $i++){
           if($arr[$i] <= $key){
               $left_arr[] = $arr[$i];
           } else {
               $right_arr[] = $arr[$i];
           }
       }
       $left_arr    = quickSort($left_arr);
       $right_arr    = quickSort($right_arr);
       return array_merge($left_arr, array($key), $right_arr);
   }
第二种:
//快速排序
function qksort(&$data,$i,$j){
if($i<$j){
$rkey=partition($data,$i,$j);
qksort($data,$i,$rkey-1);
qksort($data,$rkey+1,$j);
}
//return $data;
}
function partition(&$data,$i,$j){
$r=$data[$i];
//$count=count($data);
while($i<$j){
while($i<$j && $data[$j]>$r)
$j--;
$rf=$data[$i];
$data[$i]=$data[$j];
$data[$j]=$rf;
while($i<$j && $data[$i]<$r)
$i++;
$rf=$data[$i];
$data[$i]=$data[$j];
$data[$j]=$rf;
}
$data[$i]=$r;
return $i;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值