php实现二分查找

php实现二分查找

一、总结

1、谋而后动

2、算法想边界(临界)情况

 

二、代码

在一个数组查找你所需元素(二分查找算法)。

思路:以数组中某个值为界,再递归进行查找,直到结束。

代码一

 1 <?php
 2 function find($array, $low, $high, $k){
 3   if ($low <= $high){
 4   $mid = intval(($low+$high)/2);
 5     if ($array[$mid] == $k){
 6     return $mid;
 7   }elseif ($k < $array[$mid]){
 8     return find($array, $low, $mid-1, $k);
 9     }else{
10     return find($array, $mid+1, $high, $k);
11     }
12   }
13   die('Not have...');
14 }
15 //test
16 $array = array(2,4,3,5);
17 $n = count($array);
18 $r = find($array,0,$n,5)

1、想最后的临界情况:第13行,return false果然是写在这里,我没有想错

2、die的用法:第13行,die终结程序

 

代码二:thinkphp控制器

 1 <?php
 2 namespace app\index\controller;
 3 
 4 use app\index\controller\Base;
 5 
 6 class Exercise extends Base
 7 {
 8     public function index()
 9     {
10         // return view('insert_array');
11         $this->binary_search1Demo();
12     }
13 
14     //二分查找
15     public function binary_search1($arr,$l,$r,$search_){
16         sort($arr);
17         //2、递归返回条件
18         //3、递归实现二分查找
19         if($l<=$r){
20             $mid=intval(($l+$r)/2);
21             if ($arr[$mid]==$search_) {
22                 return true;
23             }else if($arr[$mid]>$search_){
24                 return $this->binary_search1($arr,$l,$mid-1,$search_);
25             }else{
26                 return $this->binary_search1($arr,$mid+1,$r,$search_);
27             }
28         }
29     }
30 
31     public function binary_search1Demo(){
32         $arr=array(2,5,8,13,53,78,234,435);
33         $len=count($arr);
34         $l=0;
35         $r=$l+$len-1;
36         $search_=53;
37         if($this->binary_search1($arr,$l,$r,$search_)){
38             echo "find";
39         }else{
40             echo "not find";
41         }
42     }
43 
44 }

1、算法谋而后动:第15行,谋而后动,想清楚,心中把算法演算清楚再行动

2、sort的返回值:第16行,sort的返回值是true和false,而不是排序好的数组

3、返回值:第22行,return false不知道写在哪里,事实上,不用写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值