二分查找
思路分析:数组中间的值floor((low+top)/2)
先取数组中间的值floor((low+top)/2)然后通过与所需查找的数字进行比较,
若比中间值大则将首值替换为中间位置下一个位置,继续第一步的操作;
若比中间值小,则将尾值替换为中间位置上一个位置,继续第一步操作
重复第二步操作直至找出目标数字
function BinaryQuery(array $container, $search){
$top = count($container);
$low = 0;
while ($low <= $top) {
$mid = intval(floor(($low + $top) / 2));
if (!isset($container[$mid])) {
return '没找着哦';
}
if ($container[$mid] == $search) {
return $mid;
}
$container[$mid] < $search && $low = $mid + 1;
$container[$mid] > $search && $top = $mid - 1;
}}递归版 二分查找
function BinaryQueryRecursive(array $container, $search, $low = 0, $top = 'default'){
$top == 'default' && $top = count($container);
if ($low <= $top) {
$mid = intval(floor($low + $top) / 2);
if (!isset($container[$mid])) {
return '没找着哦';
}
if ($container[$mid] == $search) {
return $mid;
}
if ($container[$mid] < $search) {
return BinaryQueryRecursive($container, $search, $mid + 1, $top);
} else {
return BinaryQueryRecursive($container, $search, $low, $mid - 1);
}
}}
