二分查找算法的PHP实现与改进
在数据结构中,除了常用的顺序查找外,当属二分查找了,不仅工作中会经常用到,面试也会经常遇到
下面是二分查找的PHP实现:
1 function halfSearch($array ,$search) { 2 $len = count($array);
3 $low = 0 ;
4 $high= $len - 1 ;
5 while ($low <= $high){
6 $mid = floor(($high + $low)/2) ;
7 if($array[$mid]>$search){
8 $high = $mid - 1 ;
9 }else if($array[$mid]<$search){
10 $low = $mid + 1 ;
11 }else{
12 return $mid ;
13 }
14 }
15 return false ;
16 }
3 $low = 0 ;
4 $high= $len - 1 ;
5 while ($low <= $high){
6 $mid = floor(($high + $low)/2) ;
7 if($array[$mid]>$search){
8 $high = $mid - 1 ;
9 }else if($array[$mid]<$search){
10 $low = $mid + 1 ;
11 }else{
12 return $mid ;
13 }
14 }
15 return false ;
16 }
这是经典二分查找
大家看还能改进吗?当然可以
如果查找值比最大的大,或比小的小,那我们是不是可以确定查找不到该元素
所以我们把代码改进下
1 function halfSearch($array ,$search) {
2 $len = count($array);
3 $low = 0 ;
4 $high= $len - 1 ;
5 if($search <$array[$low] || $search > $array[$high]){
6 return false ;
7 }
8 while ($low <= $high){
9 $mid = floor(($high + $low)/2) ;
10 if($array[$mid]>$search){
11 $high = $mid - 1 ;
12 }else if($array[$mid]<$search){
13 $low = $mid + 1 ;
14 }else{
15 return $mid ;
16 }
17 }
18 return false ;
2 $len = count($array);
3 $low = 0 ;
4 $high= $len - 1 ;
5 if($search <$array[$low] || $search > $array[$high]){
6 return false ;
7 }
8 while ($low <= $high){
9 $mid = floor(($high + $low)/2) ;
10 if($array[$mid]>$search){
11 $high = $mid - 1 ;
12 }else if($array[$mid]<$search){
13 $low = $mid + 1 ;
14 }else{
15 return $mid ;
16 }
17 }
18 return false ;
19 }
二分查找是比较简单的算法,是必须掌握的算法,大家一定要理会算法的思想