PHP 二分查找和顺序查找
二分查找
1 // 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组 2 /** 3 * 二分查找法(数组中查找某个元素) 4 * @param array $array 要查找的数组 5 * @param int $low 查找的起始位置 6 * @param array $high 查找的结束位置 7 * @param mixed $target 要查找的目标值 8 * @return int 存在此值返回key,不存在返回-1 9 */ 10 function bin_search($array, $low, $high, $target) 11 { 12 if ($low <= $high) { 13 $mid = intval(($low + $high) / 2); 14 if ($array[$mid] == $target) { 15 return true; 16 } elseif ($target < $array[$mid]) { 17 return bin_search($array, $low, $mid - 1, $target); 18 } else { 19 return bin_search($array, $mid + 1, $high, $target); 20 } 21 } 22 return false; 23 } 24 25 // $array = [1, 3, 6, 9, 13, 18, 19, 29, 38, 47, 51, 56, 58, 59, 60, 63, 65, 69, 70, 71, 73, 75, 76, 77, 79, 89]; 26 // $target = 73; 27 // $low = 0; 28 // $high = count($array) - 1; 29 // $find = bin_search($array, $low, $high, $target); 30 // var_dump($find);
顺序查找
1 /** 2 * 顺序查找(数组里查找某个元素) 3 * @param array $array 要查找的数组 4 * @param array $n 查找的结束位置 + 1 5 * @param mixed $target 要查找的目标值 6 */ 7 function seq_sch($array, $n, $target) 8 { 9 for ($i = 0; $i < $n; $i++) { 10 if ($array[$i] == $target) { 11 break; 12 } 13 } 14 if ($i < $n) { 15 return $i; 16 } else { 17 return -1; 18 } 19 } 20 21 $array = [77, 79, 89]; 22 $find = seq_sch($array, count($array), 89); 23 var_dump($find);