PHP算法之二分查找

二分查找:
   数组必须有序,且不重复。

一般实际工作中,很少有这样的数组,所以应用的很少,但是思想很好.

 1 // 二分查找
 2 $array = [10,14,23,33,45,56,65,77,89,99,102];
 3 $find = 56;
 4 
 5 function search($array,$find)
 6 {
 7     $end = count($array)-1;            //求出最大的数组个数,并以此为结束
 8     $start = 0 ;                       //以0开始
 9     $mid = floor(($end + $start)/2);   //取二分查找的中间数
10     while ($start <= $end ){           //当最小下标<最大下标时继续,说明没有查找到
11         if($find < $array[$mid]){      
12             $end = $mid -1;            //如果查找的数小于中间数,那么区间的最大下标前移
13         }elseif ($find > $array[$mid]) {
14             $start = $mid +1;          //如果查找的数大于中间数,那么区间的最小下标后移
15         }else{
16             return $mid;               //返回查询得到的数字下标
17         }
18         $mid = floor(($end + $start)/2);
19     }
20 }
21 
22 echo search($array,$find);

posted @ 2019-04-24 20:40  墙角摘蘑菇  阅读(1086)  评论(0编辑  收藏  举报