PHP实现快排

代码:

<?php
define('N', 10000);
function quickSort(&$arr){
    if(count($arr)>1){
        $k=$arr[0];
        $x=array();
        $y=array();
        $_size=count($arr);
        for($i=1;$i<$_size;$i++){
            if($arr[$i]<=$k){
                $x[]=$arr[$i];
            }elseif($arr[$i]>$k){
                $y[]=$arr[$i];
            }
        }
        $x=quickSort($x);
        $y=quickSort($y);
        return array_merge($x,array($k),$y);
    }else{
        return $arr;
    }
}

function qSort(&$arr, $left, $right){
    if($left >= $right){
        return ;
    }
    $i = $left;
    $j = $right;
    $key = $arr[$left];
    while($i < $j){
        while($i<$j && $key <= $arr[$j]){
            $j--;
        }
        $arr[$i] = $arr[$j];
        while($i<$j && $key >= $arr[$i]){
            $i++;
        }
        $arr[$j] = $arr[$i];
    }
    $arr[$i] = $key;
    qSort($arr, $left, $i-1);
    qSort($arr, $i+1, $right);
}

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

for($i=0 ; $i < N; $i++)
$rand[] = rand(0,N);
//print_r($rand);

$startms = microtime_float();
echo "startms:" . $startms . "<br>";
//for($i=0 ; $i < 5; $i++)
$sort = quickSort($rand);
$endms = microtime_float();
echo "endms:" . $endms . "<br>";
echo $endms - $startms, "<br>";

$startms1 = microtime_float();
echo "<br>startms1:" . $startms1 . "<br>";
//for($i=0 ; $i < 5; $i++)
qSort($rand, 0, N-1);
$endms1 = microtime_float();
echo "endms1:" . $endms1 . "<br>";
echo $endms1 - $startms1;

echo "<br>",($endms - $startms)/($endms1 - $startms1);
?>


qSort()的速度较quickSort()快4倍。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值