我的二分查找函數(shù)為什么返回不了值??
<?php
function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){
//取中間的數(shù)的下標
$middleIndex=round(($leftIndex+$rightIndex)/2); ?
if($leftIndex>$rightIndex){
return "查找不到";
}
if($findVal>$arr[$middleIndex]){ ?//當查找的值比中間的數(shù)大
binarySearch($arr,$findVal,$middleIndex+1,$rightIndex); ?//從中間數(shù)的后段查找
}elseif($findVal<$arr[$middleIndex]){ ?//當查找的值比中間的數(shù)小
binarySearch($arr,$findVal,$leftIndex,$middleIndex-1); ?//從中間數(shù)的前段查找
}else{
return $middleIndex;
}
}
$a=array(1,2,3,4,5,6,7,8,9);
$b=binarySearch($a,1,0,count($a)-1);
var_dump($b);
?>
2016-11-04
有沒有大神幫忙看看?。??
2016-09-09
另外二分查找的前提是按順序排列的數(shù)組
2016-09-09
兄弟,你想復雜了
二分查找,是查找,不是排序,比如你想在一個不重復的數(shù)組里面查找 有沒有1,然后返回它的下標,下面是代碼
? ? function binarySearch(Array $arr, $target) {
? ? ? ? $low = 0;
? ? ? ? $high = count($arr) - 1;
? ? ? ? while($low <= $high) {
? ? ? ? ? ? $mid = floor(($low + $high) / 2);
? ? ? ? ? ? #找到元素
? ? ? ? ? ? if($arr[$mid] == $target) return $mid;
? ? ? ? ? ? #中元素比目標大,查找左部
? ? ? ? ? ? if($arr[$mid] > $target) $high = $mid - 1;
? ? ? ? ? ? #重元素比目標小,查找右部
? ? ? ? ? ? if($arr[$mid] < $target) $low = $mid + 1;
? ? ? ? }
? ? ? ? #查找失敗
? ? ? ? return false;
? ? }
? ? $arr = array(1, 3, 5, 7, 9, 11);
? ? $inx = binarySearch($arr, 1);
? ? var_dump($inx);
2016-09-05
失誤了,你有用遞歸方法
2016-09-03
這里是不是沒加循環(huán)一直查下去,或者用遞歸方法一直查下去