php 二分查找

 1   /**
 2      *  二分查找
 3      * @param $key 要查找的值
 4      * @param $data 数据源
 5      * @return int|string 返回找到结果
 6      */
 7     public function halfsearch($key, $data){
 8         //统计总数
 9         $count = count($data);
10         //起始位值
11         $start = 0;
12         //结束位置
13         $end = $count - 1;
14         while($end >= $start){
15             //每次查找时的中间值
16             $mid = floor(($end + $start) / 2);
17             if($key == $data[$mid]){
18                 return $mid;
19             }elseif($key > $data[$mid]){    //比中间的值大,从右边开始找
20                 $start = $mid + 1;
21             }elseif($key < $data[$mid]){    //比中间值小,从左边开始找
22                 $end = $mid - 1;
23             }
24         }
25 
26         return 'not found ~';
27     }

 

二分查找的优点和缺点

  虽然二分查找的效率高,但是要将数据源先排序。而排序本身是一种很费时的运算。既使采用高效率的排序方法也要花费O(nlgn)的时间。

  二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。

  因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。

posted @ 2017-04-02 20:40  茶觉  阅读(282)  评论(0)    收藏  举报