PHP 查找算法

  1. <?php    
  2.     header("content-type:text/html;charset=utf-8");  
  3.     //二分查找法  (排序好的数组)  
  4.     function binSearch($arr,$search){    
  5.         $height=count($arr)-1;    
  6.         $low=0;    
  7.         while($low<=$height){    
  8.             $mid=floor(($low+$height)/2);//获取中间数    
  9.             if($arr[$mid]==$search){    
  10.                 return $mid;//返回    
  11.             }elseif($arr[$mid]<$search){//当中间值小于所查值时,则$mid左边的值都小于$search,此时要将$mid赋值给$low    
  12.                 $low=$mid+1;    
  13.             }elseif($arr[$mid]>$search){//中间值大于所查值,则$mid右边的所有值都大于$search,此时要将$mid赋值给$height    
  14.                 $height=$mid-1;    
  15.             }    
  16.         }    
  17.         return "查找失败";    
  18.     }     
  19.     //二分查找递归实现  (排序号的数组)  
  20.     function binSearch2($arr,$low,$height,$k){    
  21.         if($low<=$height){    
  22.             $mid=floor(($low+$height)/2);//获取中间数    
  23.             if($arr[$mid]==$k){    
  24.                 return $mid;    
  25.             }elseif($arr[$mid]<$k){    
  26.                 return binSearch2($arr,$mid+1,$height,$k);    
  27.             }elseif($arr[$mid]>$k){    
  28.                 return binSearch2($arr,$low,$mid-1,$k);    
  29.             }    
  30.         }    
  31.         return -1;    
  32.     }    
  33.         
  34.     //顺序查找    
  35.     function seqSearch($arr,$k){    
  36.         foreach($arr as $key=>$val){    
  37.             if($val==$k){    
  38.                 return $key;    
  39.             }    
  40.         }    
  41.         return -1;    
  42.     }    
  43.         
  44.     $arr=array(1,2,3,4);    
  45.     echo in_array(4,$arr).'<br/>';    
  46.     echo binSearch($arr,4).'<br/>';    
  47.     echo binSearch2($arr,0,4,4).'<br/>';    
  48.     echo array_search(4,$arr).'<br/>';   
  49.     $arr=array(1,3,4,2);    
  50.     echo in_array(4,$arr).'<br/>';    
  51.     echo seqSearch($arr,4).'<br/>';    
  52.     echo array_search(4,$arr);    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值