php一般查找方法

jom258 2013-09-15 11:07:32
初级学习!!


<?php
//普通查找方法
function Search(&$arr,$findVal)
{
$flag = false;
for($i = 0 ; $i<count($arr);$i++)
{

if($findVal == $arr[$i])
{

echo "find i ,xiao biao is : $i";
$flag = true;
}
}
if(!$flag)
{
echo " search none!!";
}
}


//二分发查找
function binarySearch(&$arr,$findVal,$right,$left)
{

$middle = round(($right + $left)/2);
echo $middle;
if($right < $left){
echo "error !!\n";
return;
}
if($findVal > $arr[$middle])
{
binarySearch($arr,$findVal,$middle +1,$left);
}else if($findVal < $arr[$middle])
{
binarySearch($arr,$findVal,$right,$middle -1);
}else{
echo "find this shu xia biao is :$middle ";
}
}



$arr = array(44,45,90,98,110);

binarySearch($arr,44 ,count($arr)-1,0);

//二分发查找

function Dichotomy($php,$k,$low=0,$max=0)

{

if(count($php)!= 0 and $max == 0)

{

$max = count($php);

}

if($low <= $max)

{

$mid = intval(($low+$max)/2);

if($php[$mid] == $k)

{

return $mid;

}

else if($k < $php[$mid])

{

return Dichotomy($php,$k,$low,$mid-1);

}

else

{

return Dichotomy($php,$k,$mid+1,$max);

}

}

return -1;

}

$php = array('1','2','3','4','5','6');

echo Dichotomy($php,5);

?>
...全文
270 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2013-09-17
  • 打赏
  • 举报
回复
in_arrar array_search array_filter 变通一下 array_keys array_intersect 不是什么都需要从原型开始的!
bojimiyabojimiya 2013-09-17
  • 打赏
  • 举报
回复
如果是二分的话,顺便加几个排序吧
绝望依然 2013-09-16
  • 打赏
  • 举报
回复
加油!!!
码无边 2013-09-16
  • 打赏
  • 举报
回复
楼主算分贴!!!!
Hx_Moon_ 2013-09-16
  • 打赏
  • 举报
回复
我也缺分了,撸主威武
iasky 2013-09-16
  • 打赏
  • 举报
回复
<?php
function Array_BinarySearch( $needle, $haystack, $comparator , &$probe )
{
    $high = Count( $haystack ) -1;
    $low = 0;
    
    while ( $high >= $low )
    {
        $probe = Floor( ( $high + $low ) / 2 );
        $comparison = $comparator( $haystack[$probe], $needle );
        if ( $comparison < 0 )
        {
            $low = $probe +1;
        }
        elseif ( $comparison > 0 ) 
        {
            $high = $probe -1;
        }
        else
        {
            return true;
        }
    }
    //The loop ended without a match 
    //Compensate for needle greater than highest haystack element
    if($comparator($haystack[count($haystack)-1], $needle) < 0)
    {
        $probe = count($haystack);
    } 
    return false;
}
?>
参考:http://php.net/manual/en/function.array-search.php 下面的评论
ahui_lcm 2013-09-16
  • 打赏
  • 举报
回复
散分帖,谢谢楼主。
lazyboy_wu 2013-09-16
  • 打赏
  • 举报
回复
你的目的是什么?炫耀贴?求助帖?研究贴?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧