php中实现二分法查找的程序代码

七月 20, 2019 | views
Comments 0

二分法查找在高级点的开发可能会用到了,当然在大公司找工作时都会有面试题是这种了,下面我们来看一篇关于二分法查找在php中实现方法,具体的细节如下所示.

二分法(dichotomie) 即一分为二的方法,设[a,b]为R的闭区间,逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点.

例子1:

  1. header('Content-Type: text/html; charset=utf-8;'); 
  2. $arr = array(2,33,22,1,323,321,28,36,90,123); 
  3. sort($arr); 
  4. //二分法查找 
  5. echo $index = binarySearch($arr,321); 
  6. function binarySearch($arr,$key){ 
  7.  $len = count($arr); 
  8.  $mid = -1; 
  9.  $start = 0; 
  10.  $end   = $len-1; 
  11.  while($start<=$end){ 
  12.   $mid = (int)(($start+$end)/2); 
  13.   echo $mid."\n"
  14.   if($arr[$mid] == $key){ 
  15.    return $mid
  16.   }else if($arr[$mid] < $key){ 
  17.    $start = $mid+1; 
  18.   }else if($arr[$mid] > $key){ 
  19.    $end = $mid-1;  
  20.   } 
  21.  } 

例子2:

  1. <?php 
  2. //search函数 其中$array为数组,$k为要找的值,$low为查找范围的最小键值,$high为查找范围的最大键值 
  3. function search($array$k$low=0, $high=0)  
  4. {  
  5.     if(count($array)!=0 and $high == 0)     //判断是否为第一次调用 
  6.     { 
  7.         $high = count($array); 
  8.     } 
  9.     if($low <= $high)        //如果还存在剩余的数组元素 
  10.     {  
  11.         $mid = intval(($low+$high)/2);      //取$low和$high的中间值 
  12.         if ($array[$mid] == $k)       //如果找到则返回 
  13.         {  
  14.             return $mid;  
  15.         } 
  16.         elseif ($k < $array[$mid])      //如果没有找到,则继续查找 
  17.         {  
  18.             return search($array$k$low$mid-1);  
  19.         } //phpfensi.com 
  20.         else 
  21.         {  
  22.             return search($array$k$mid+1, $high);  
  23.         }  
  24.     }  
  25.     return -1;  
  26. }  
  27. $array = array(4,5,7,8,9,10);       //测试search函数 
  28. echo search($array, 8);        //调用search函数并输出查找结果 
  29. ?> 



zend