注:二分查找算法的数组必须是排序好的
<?php
//二分查找法
function binarySearch($arr,$search){
$height=count($arr)-1;
$low=0;
while($low<=$height){
$mid=floor(($low+$height)/2);
if($arr[$mid]==$search){
return $mid;
}elseif($arr[$mid]<$search){
$low=$mid+1;
}elseif($arr[$mid]>$search){
$height=$mid-1;
}
}
return "查找失败";
}
//二分查找递归实现
function binarySearch3($arr,$low,$height,$k){
if($low<=$height){
$mid=floor(($low+$height)/2);//获取中间数
if($arr[$mid]==$k){
return $mid;
}elseif($arr[$mid]<$k){
return binSearch3($arr,$mid+1,$height,$k);
}elseif($arr[$mid]>$k){
return binSearch3($arr,$low,$mid-1,$k);
}
}
return -1;
}
//顺序查找
function orderSearch($arr,$k){
foreach($arr as $key=>$val){
if($val==$k){
return $key;
}
}
return -1;
}
$arr=array(12,32,43,54,56,77,98);
echo binarySearch($arr,32).'<br/>';
echo binarySearch3($arr,0,7,54).'<br/>';
echo orderSearch($arr,44).'<br/>';