PHP二分查找算法

思路:递归算法。在一个已经排好序的数组中查找某一个数值,每一次都先跟数组的中间元素进行比较,若相等则返回中间元素的位置,若小于中间元素,则在数组中小于中间元素的部分查找,若大于中间元素,则在数组中大于中间元素的部分查找,若查找不到则返回-1.

function binSearch($arr,$head,$tail,$find)

{

         if($head > $tail) {  //开始位置大于末尾位置,表示没找到

                   return -1;

         }

         $mid = intval(($head+$tail)/2);

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

                   return $mid;

         } else if($arr[$mid] < $find) {

                   return binSearch($arr,$mid+1,$tail,$find);

         } else {

                   return binSearch($arr,$head,$mid-1,$find);

         }

}

注意:

    在计算中间位置的时候不能直接写$mid = ($head+$tail)/2;,因为PHP是弱类型语言,它并不会将($head+$tail)/2得到的结果强制转化为整数,所以得到的有可能是小数,而数组的下标数值是没有小数的,从而导致程序出错。所以在这里使用intval函数对得到的结果进行取整。关于PHP的取整函数,若想了解更多,可以参考我的另一篇博文:PHP的取整函数

     

原文地址:https://www.cnblogs.com/wujuntian/p/4778747.html