首先说下二分查找,需要在数组的数据结构上应用,而且前提是这个数组是有序的。不管是升序还是降序。一般数组的查找都是顺序查找,也就是逐个比对。而二分查找是分治思想的一个代表性应用。大概思想是 拿所想找的数字,去和数组中间的值比较。如果相等,直接返回KEY值,如果大于,拿右边的数组再去进行一分为二。如果小于,拿左边的数组进行对比。知道数组为空。下面看具体代码实现。
function handle()
{
$arr = array(2, 11, 23, 5, 888, 111, 22, 34, 56, 134, 22);
sort($arr);
$number = 22;
$key = $binarySearch($number,$arr,10);
echo $key;
}
/**
* @param $arr
* @desc 二分查找,保证传递的数组是有序的
*/
function binarySearch($number,$arr,$endKey)
{
$halfKey = ceil($endKey /2);
if($halfKey < 0 ) return $number.'没找到';
if($number == $arr[$halfKey]){
return $number.'下标为'.$halfKey;
}else if ($number <$arr[$halfKey]){
//传递左边数组进行,查找
return $binarySearch($number,$arr,$halfKey -1);
}else{
//传递右边数组进行,查找
return $binarySearch($number,$arr,$endKey + 1);
}
}