二分查找

二分查找


 

简介:

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。

算法要求:

1.必须采用顺序存储结构。
2.必须按关键字大小有序排列。

 

时间复杂度:可以表示O(h)=O(log2n)(是以2为底,n的对数)


 

代码示例:

(考虑到数组索引可能从非0开始)

方式一:使用wile循环,

<?php
function binary_search2($arr, $value)
{
    $len = count($arr);
    $keys_arr = array_keys($arr);//获取所有的键
    $min_key = $keys_arr[0];//获得最小的键
    $max_key = $min_key + $len -1;//获得最大的键
    while ($min_key <= $max_key) {
        $middle_key = intval(($min_key + $max_key) / 2);
        if ($value > $arr[$middle_key]) {
            $min_key = $middle_key + 1;
        } elseif ($value < $arr[$middle_key]) {
            $max_key = $middle_key - 1;
        } else {
            return $middle_key;
        }
    }
    return false;
}

 

方式二:递归调用

<?php
function binary_search($arr,$search){
    $len = count($arr);
    $keys_arr = array_keys($arr);//获取所有的键
    $min_key = $keys_arr[0];//获得最小的键
    $max_key = $min_key + $len -1;//获得最大的键
    if($search>$arr[$max_key] || $search<$arr[$min_key]){
        return false;
    }
    $middle_key = intval(($min_key + $max_key ) / 2);//中间的键
    $middle_len = intval($len / 2);
    if($arr[$middle_key] > $search){
        $new_arr = array_slice($arr,0,$middle_len,true);
        return binary_search($new_arr,$search);
    }else if($arr[$middle_key] < $search){
        $new_arr = array_slice($arr,$middle_len,$len,true);    
        return binary_search($new_arr,$search);
    }else{
        return $middle_key;
    }
}

php相关函数:array_search();

array_search(value,array,strict)

 

转载于:https://www.cnblogs.com/gyfluck/p/10620365.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值