PHP完成二分查找法
二分查找法须要的数组是一个有序的数组,假定我们的数组是一个递增的数组,起首,我们须要找到数组的中心位置。
一、要晓得中心位置就须要晓得肇端位置和完毕位置,然后掏出中心位置的值来和我们的值做对照。
二、假如中心值大于我们的给定值,申明我们的值在中心位置之前,此时须要再次二分,由于在中心之前,所以我们须要变的值是完毕位置的值,此时完毕位置的值应该是我们此时的中心位置。
三、反之,假如中心值小于我们给定的值,那末申明给定值在中心位置以后,此时须要再次将后一部分的值举行二分,由于在中心值以后,所以我们须要转变的值是最先位置的值,此时最先位置的值应该是我们此时的中心位置,直到我们找到指定值。
四、或许中心值即是最初的肇端位置,或完毕位置(此时申明给定值未找到)
下面我们来用代码完成
1、轮回完成
function getValue($num,$arr) { //查找数组的中心位置 $length=count($arr); $start=0; $end=$length; $middle=floor(($start+$end)/2); //轮回推断 while($start>$end-1) { if($arr[middle]==$num) { return middle+1; }elseif($arr[middle]<$num) { //假如当前要查找的值比当前数组的中心值还要打,那末意味着该值在数组的后半段 //所以肇端位置变成当前的middle的值,end位置稳定。 $start=$middle; $middle=floor(($start+$end)/2); }else{ //反之 $end=$middle; $middle=floor(($start+$end)/2); }} return false; }
2、递归完成
/* * 从数组中猎取元素值 * @param1 int $num,要查找的目标值 * @param2 array $arr,要查找的数组 * @param3 int $start,查找的肇端位置 * @param4 int $end,查找的完毕位置 * @return mixed,找到了返回位置,没找到返回false */ function getValue4($num,$arr,$start = 0,$end = 100){ //采纳二分法查找 $middle = floor(($end + $start) / 2); //推断 if($arr[$middle] == $num){ //已找到了,递归的出口 return $middle + 1; }elseif($arr[$middle] < $num){ //要查找的元素在数组的后半段 $start = $middle + 1; //边境值 if($start >= $end){ //没有找到,然则已超越边境值,递归出口 return false; } //挪用本身去查找:递归点 return getValue4($num,$arr,$start,$end); //getValue4($num,$arr,51,100) }else{ //要查找的元素在数组的前半段 $end = $middle - 1; //推断边境值 if($end < 0)return false; //挪用本身:递归点 return getValue4($num,$arr,$start,$end); //getValue4($num,$arr,0,49) } //都没有找到 return false; }
以上内容仅供参考!
引荐教程:PHP视频教程
以上就是php怎样完成二分查找法的细致内容,更多请关注ki4网别的相干文章!