/** * 注意:二分法的前提是,需要数组是有序的 */ $arr_list = [10, 11, 14, 16, 18, 19, 21, 29, 30, 36, 38, 42, 43, 47, 49, 50, 53, 54, 57, 80, 84, 94, 96, 102, 105, 107, 120, 125, 129, 138, 139, 140, 150, 188, 190, 200]; sort($arr_list); /** * @param $arr * @param $num * @return int */ function desc($arr, $num) { $start = 0; $end = count($arr) - 1;//获取长度-1 while ($start < $end) { $mid = intval(($end + $start) / 2); if ($arr[$mid] == $num) { return $mid; } elseif ($arr[$mid] < $num) { //说明查找目标在下半区 $start = $mid; } elseif ($arr[$mid] > $num) { //说明查找目标在上半区 $end = $mid; } } return -1; } $mid = desc($arr_list, 102); print_r($arr_list[$mid]);
PHP实现二分查找,详解
最新推荐文章于 2023-06-05 07:09:20 发布