求C# Array.BinarySearch的实现原理

翻阅了.net的源代码,发现很多都是接口,看的真是头昏眼花http://referencesource.microsoft.com/现在就是想在php中实现类似的算法,看... 翻阅了.net 的源代码,发现很多都是接口,看的真是头昏眼花
http://referencesource.microsoft.com/
现在就是想在php中实现类似的算法,看的我头好晕,麻烦有知道的解释下原理
展开
 我来答
然后去远足
2015-01-14 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2442万
展开全部

二分查找是最简单的搜索算法之一了……


原理就是先比较有序表(以升序表为例)的中间元素和待查元素,如果是相等,直接返回索引;如果中间元素比待查元素大,则在左部重复上述过程;反之在右部重复上述过程。


给个示例:

    function binarySearch(Array $arr, $target) {
        $low = 0;
        $high = count($arr) - 1;
        
        while($low <= $high) {
            $mid = floor(($low + $high) / 2);
            #找到元素
            if($arr[$mid] == $target) return $mid;
            #中元素比目标大 查找左部
            if($arr[$mid] > $target) $high = $mid - 1;
            #中元素比目标小 查找右部
            if($arr[$mid] < $target) $low = $mid + 1;
        }
        
        #查找失败
        return false;
    }
    
    $arr = array(1, 3, 5, 7, 9, 11);
    $inx = binarySearch($arr, 1);
    var_dump($inx);
更多追问追答
追问
你这个和.net 的计算结果不一样
function binarySeach($array,$value){
$i = array_search($value,$array);
if($i == null){
if($value < min($array))
{
$i = -1;
}else
{
$i = - (count($array));
}
}
return $i;
}
这个才是正确的
追答
二分查找是一类算法……写法有很多种……
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式