PHP算法之二分查找和顺序查找
一、二分查找 (数组里查找某个元素)
1 /** 2 * 二分查找 (数组里查找某个元素) 3 * $k为要查找的关键字(注:待查找的数组元素为奇数个)$low为查找范围的最小键值,$high为查找范围的最大键值 4 */ 5 $low = min(array_keys($array)); 6 $high = max(array_keys($array)); 7 function dichotomy_search($array, $low, $high, $k) { 8 if ($low <= $high) { 9 $mid = intval ( ($low + $high) / 2 ); 10 if ($array [$mid] == $k) { 11 return $mid; 12 } elseif ($k < $array [$mid]) { 13 return dichotomy_search ( $array, $low, $mid - 1, $k ); 14 } else { 15 return dichotomy_search ( $array, $mid + 1, $high, $k ); 16 } 17 } 18 return -1; 19 }
二、顺序查找 (数组里查找某个元素)
1 /** 2 * 顺序查找 (数组里查找某个元素) 3 * $array为数组,$k为要查找的值 4 */ 5 function sequential_search($array, $k) { 6 $n = count($array); 7 $array[$n] = $k; //新建一个元素,并将k存放进去 8 for($i = 0; $i < $n; $i++) { 9 if($array[$i] == $k) { 10 break; 11 } 12 } 13 if($i < $n) { //如果在新元素的前面找到了要找的值,则返回该值 14 return $i; 15 } else { 16 return -1; 17 } 18 }