算法----查找

array_search() 函数在数组中搜索某个键值,并返回对应的键名。

in_array() ,在数组中查找一个键值。如果找到了该值,返回true。如果没找到,则返回 false

 

算法:

①顺序查找:

//顺序查找  

function SqSearch($arr,$key){  

    $length = count($arr);  

    for($i=0;$i<$length;$i++){  

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

                return $i+1;  

            }  

        }  

        return -1;  

    }  

$key = 8;  

echo "<br/>顺序常规查找{$key}的位置:";  

echo SqSearch($arr,$key);  

$arr = array(3,5,8,4,9,6,1,7,2);

②二分查找

//二分查找  

二分查找法需要数组是一个有序的数组

 

假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置.

 

一。要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比。

 

二。如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置。

 

三。反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改变的值是开始位置的值,此时开始位置的值应该是我们此时的中间位置,直到我们找到指定值。

$arr = array(3,5,8,4,9,6,1,7,2);  1,2,3,4,5,6,7,8,9

function binary_search($arr,$low,$high,$key){  

    while($low<=$high){  

        $mid = intval(($low+$high)/2);   4

            if($key == $arr[$mid]){  

            return $mid+1;  

            }elseif($key<$arr[$mid]){  6   4

            $high = $mid-1;  

        }elseif($key>$arr[$mid]){  

                $low = $mid+1;  

            }  

    }  

    return -1;  

}  

$key = 6;  

echo "二分查找{$key}的位置:";  

echo binary_search(QSort($arr),0,8,$key);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值