二分法又称之为折半算法: 是指针对一个已经排好序的数组中去找到对应的元素的位置
原理: 将数组折半,找到中间元素: 将中间元素与要找的元素进行比较: 如果一样,返回位置(找到了);如果比元素小, 将后半部分再查找; 如果比元素大, 将前半部分进行查找;
代码实现
/** * 二分查找 * @param string $target 要查找的目标 * @param array $arr 被查找的数组 * @return void */ function binary_search($target, $arr) { // 求出长度 $len = count($arr); // 求出当前所找元素的左右区间(数组下标位置) $left = 0; $right = $len - 1; // 求出中间位置下标 $middle = ceil($len / 2); // 循环 while ($left <= $right) { // 判断当前的中间元素是否与目标值相等 if ($arr[$middle] == $target) { // 找到 return '位置为第:' . ($middle + 1); break; } elseif ($arr[$middle] < $target) { // 去middle元素的右边找 $left = $middle + 1; // 计算当前中间的位置 $middle = $left + floor(($right - $left) / 2); } else { // 当前中间元素大于目标值(3):去左边找 $right = $middle - 1; // 计算当前中间的位置 $middle = ceil(($right - $left) / 2); } } } // 定义参数 $target = 3; $arr = array(1,2,3,4,5,6,7,8,9,10); // 调用函数 echo binary_search($target, $arr); // 位置为第:3