需求:定义一个函数接收一个数组对象和一个要查找的目标元素,函数要返回该目标元素在数组中的索引值,如果目标元素不存在数组中,那么返回-1表示。
//折半查找法(二分法): 使用前提必需是有序的数组。 //如果是从小到大的数组 function halfSearch($arr, $target) { //定义三个变量 分别记录最小、最大、中间元素的索引值 $min = 0; $max = count($arr) - 1; $mid = floor(($min + $max) / 2); while (true) { if ($target > $arr[$mid]) {//如果目标值大于中间值,目标值应该在中间值右边 $min = $mid + 1; } elseif ($target < $arr[$mid]) {//如果目标值小于中间值,目标值应该在中间值左边 $max = $mid - 1; } else {//如果中间值等于目标值 那么中间值的索引即为要查找的目标元素的索引 return $mid; } //如果max或者min 发生变化后出现下面这种情况 说明目标值不在该数组范围内 if ($max < $min) { return -1; } $mid = floor(($min + $max) / 2); } }