所谓二分查找,它有一个重要前提,该数组本身已经是一个有序数组,如果该数组不是有序的,则必须先排序再查找
#findVal查找这个数
function binarySearch($arr,$findVal,$leftIndex,$rightIndex){
//当$rightIndex下标不能 > $leftIndex 说明没有数
if($rightIndex < $leftIndex){
echo "找不到该数";
return;
}
//找到中间这个数
$middleIndex=round(($rightIndex+$leftIndex)/2);
//如果大于后面找
if($findVal>$arr[$middleIndex]){
binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);
}else if($findVal<$arr[$middleIndex]){//如果小于中间在数
binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);
}else{
echo "找到这个数 下标是$middleIndex";
}
}
$arr = array(-2,-1,0,90,900,1001,20314
#binarySearch($arr,-3,0,count($arr)-1);
binarySearch($arr,-90,0,count($arr)-1);