顺序查找:对某个数组,按顺序一个一个比较,找到想要的数据;
$arr=array(45,90,700,0,-1);
function search(&$arr,$findVal){
$falg=false;
for($i=0;$i<count($arr);$i++){
if($findVal==$arr[$i]){
echo"找到了,下标为=".$i;
$flag=true;
break;//(只找一个时break,找多个不要)
}
}
if(!$flag){
echo"查询不到";
}
}
search($arr,0);
输出:找到了,下标为=3
二分查找(掌握)
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(-15,-10,0,20,200,250,255);
binarySearch($arr,250,0,count($arr)-1);
结果:找到了这个数,下标是=5