function binarySearch($array, $key, $low, $high) { if ($low > $high) { return -1; } $middle = (int) (($high + $low) / 2); if ($array[$middle] == $key) { return $middle; } elseif ($array[$middle] > $key) { return binarySearch($array, $key, $low, $middle - 1); } elseif ($array[$middle] < $key) { return binarySearch($array, $key, $middle + 1, $high); } }
function array2DBunarysearch($arr2D, $needle) { $len = count($arr2D); $currentMin; for ($i = 0; $i < $len; $i++) { $currentMin = $arr2D[$i][0]; if ($currentMin > $needle) { continue; } $j = binarySearch($arr2D[$i], $needle, 0, count($arr2D[$i]) - 1); if ($j != -1) { return $i . ' ' . $j; } } }
function binarySearch($arr, $findVal, $leftIndext, $rightIndext) { if ($rightIndext < $leftIndext) { echo "查询不到"; return; } $middleIndext = round(($leftIndext + $rightIndext) / 2); if ($findVal < $arr[$middleIndext]) { binarySearch($arr, $findVal, $leftIndext, $middleIndext - 1); } else { if ($findVal > $arr[$middleIndext]) { binarySearch($arr, $findVal, $middleIndext + 1, $rightIndext); } else { echo "已查询到了 {$middleIndext}"; } } }
function binarySearch($arr, $n, $m1, $n1, $m2, $n2) { $start_row = $m1; $start_col = $n1; $end_row = $m2; $end_col = $n2; $i = intval(($m1 + $m2) / 2); $j = intval(($n1 + $n2) / 2); if (!isset($arr)) { return false; } if ($n < $arr[$m1][$n1] || $n > $arr[$m2][$n2]) { return false; } elseif ($n == $arr[$m1][$n1] || $n == $arr[$m2][$n2]) { return true; } while (($i != $m1 || $j != $n1) && ($i != $m2 || $j != $n2)) { if ($n == $arr[$i][$j]) { return true; } elseif ($n < $arr[$i][$j]) { $m2 = $i; $n2 = $j; $i = intval(($i + $m1) / 2); $j = intval(($j + $n1) / 2); } else { $m1 = $i; $n1 = $j; $i = intval(($i + $m2) / 2); $j = intval(($j + $n2) / 2); } } //search right if ($i < $end_row) { $left_result = binarySearch($arr, $n, $i + 1, $start_col, $end_row, $j); } //search left if ($j < $end_col) { $right_result = binarySearch($arr, $n, $start_row, $j + 1, $i, $end_col); } if ($left_result || $right_result) { return true; } else { return false; } }
function binarySearch($arr, $findVal, $leftIndex, $rightIndex) { if ($rightIndex < $leftIndex) { echo "查询不到"; return; } $middleIndext = round(($leftIndex + $rightIndex) / 2); if ($findVal < $arr[$middleIndext]) { //函数参数位置不能换 并且参数不能写错了 binarySearch($arr, $findVal, $leftIndex, $middleIndext - 1); } else { if ($findVal > $arr[$middleIndext]) { binarySearch($arr, $findVal, $middleIndext + 1, $rightIndex); } else { echo "已查询到了 {$middleIndext}"; } } }
function binarySearch($arr, $val, $start, $end) { $num = $end - $start; if ($num > 1) { $average = ceil($num / 2); if ($arr[$start + $average] == $val) { return $start + $average; } if ($arr[$start + $average] > $val) { return binarySearch($arr, $val, $start, $start + $average - 1); } return binarySearch($arr, $val, $start + $average, $end); } if ($arr[$end] >= $val && $arr[$start] < $val) { return $end; } return $start; }
function check_whitelist($list, &$snum) { if (empty($list)) { return array(); } $file = dirname(__FILE__) . '/AIBOLIT-WHITELIST.db'; $snum = max(0, @filesize($file) - 1024) / 20; echo "\nLoaded " . ceil($snum) . " known files\n"; sort($list); $hash = reset($list); $fp = @fopen($file, 'rb'); if (false === $fp) { return array(); } $header = unpack('V256', fread($fp, 1024)); $result = array(); foreach ($header as $chunk_id => $chunk_size) { if ($chunk_size > 0) { $str = fread($fp, $chunk_size); do { $raw = pack("H*", $hash); $id = ord($raw[0]) + 1; if ($chunk_id == $id and binarySearch($str, $raw)) { $result[] = $hash; } } while ($chunk_id >= $id and $hash = next($list)); if ($hash === false) { break; } } } fclose($fp); return $result; }
return $mid; } #中元素比目标大,查找左部 if ($arr[$mid] > $target) { $high = $mid - 1; } #重元素比目标小,查找右部 if ($arr[$mid] < $target) { $low = $mid + 1; } } #查找失败 return false; } $arr = array(1, 3, 5, 7, 9, 11); $inx = binarySearch($arr, 1); var_dump($inx); function php_explode($delim, $str) { if (!$delim) { return false; } $delim = strval($delim); $str = strval($str); if (!$delim || !$str) { return false; } $delim_len = strlen($delim); $str_len = strlen($str); if ($delim_len > $str_len) { return false;
*/ /** * @param $x * @param array $list * * @return float|int */ function binarySearch($x, array $list) { $left = 0; $right = count($list) - 1; while ($left <= $right) { $mid = floor(($left + $right) / 2); echo $mid . ','; if ($list[$mid] == $x) { return $mid; } elseif ($list[$mid] > $x) { $right = $mid - 1; } elseif ($list[$mid] < $x) { $left = $mid + 1; } } return -1; } $arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; $find = 8; var_dump($arr); echo 'We look for number:' . $find . '<br>'; echo '<b>Binary Search with iteration: </b><br>'; echo '<br>' . binarySearch($find, $arr);
function binarySearch(&$arr, $findVal, $left, $right) { if ($left > $right) { return; } $midIndex = round(($left + $right) / 2); if ($arr[$midIndex] > $findVal) { binarySearch($arr, $findVal, $left, $midIndex - 1); } else { if ($arr[$midIndex] < $findVal) { binarySearch($arr, $findVal, $midIndex + 1, $right); } else { return $midIndex; } } }
/** * Created by PhpStorm. * User: liulei * Date: 16/9/21 * Time: 下午11:50 */ function binarySearch($arr = [], $target) { $length = count($arr); $low = 0; $high = $length - 1; while ($low <= $high) { $mid = floor(($low + $high) / 2); if ($arr[$mid] == $target) { return '元素的位置是:' . $mid; } if ($arr[$mid] > $target) { $high = $mid - 1; } if ($arr[$mid] < $target) { $low = $mid + 1; } } return 'Not Found'; } $arr = [1, 3, 5, 7, 9, 10, 15, 18]; echo binarySearch($arr, 9) . PHP_EOL; echo binarySearch($arr, 18) . PHP_EOL; echo binarySearch($arr, 14);