快速排序、二分法查找的PHP实现代码

快速排序PHP排序代码

function quickSort($arr)
{
    $len = count($arr);
    if ($len <= 1) {
        return $arr;
    }
    $base = $arr[0];
    $left = $right = [];
    for ($i = 1; $i < $len; $i++) {
        if ($arr[$i] <= $base) {
            $left[] = $arr[$i];
        } else {
            $right[] = $arr[$i];
        }
    }
    $left = quickSort($left);
    $right = quickSort($right);

    return array_merge($left, [$base], $right);
}

快速排序的缺点:不稳定。

当待排序待数组中存在A、B两个相同的值时,排序之前A在B的前面,排序之后B可能会排在A的前面。 
最优的情况:每次选择的$base刚好可以平分数组,此时时间复杂度为O(nlogn)

最坏情况:每次选择的$base刚好是最大值或者最小值,此时时间复杂度为O(n2)

 

二分法查找的PHP实现代码

function binarySearch($arr, $target)
{
    $len = count($arr);
    if ($len < 1) {
        return false;
    }

    $low = 0;
    $high = $len - 1;
    while ($low <= $high) {
        var_dump($low);
        var_dump($high);
        $mid = (int)(($high - $low) / 2 + $low);
        var_dump($mid);
        if ($target > $arr[$mid]) {

            $low = $mid+1;
        } else if ($target < $arr[$mid]) {
            $high = $mid-1;
        } else {
            return $mid;
        }
    }
    return $mid-1;

}

var_dump(binarySearch([1, 2, 4, 5, 8, 43, 54, 65, 76, 87, 98, 123], 5));

二分法查找的缺点:如果查找的值在待查找的数组中存在多个,那返回的只有一个值。

 

 

今天发现一个在线调试代码的地址,分享给大家http://tool.lu/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值