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不知道写在哪里,事实上,不用写