二分查詢(數組裡查詢某個元素)
阿新 • • 發佈:2018-12-19
二分查詢(折半查詢) 陣列元素有序 陣列的元素必須有順序,從小到大或者從大到小。 1、定義一個有序的陣列
<?php
$max = 10000; // 陣列最大值
$number = 1; // 陣列開始值
$arr = []; // 陣列
while ( $number <= $max ){
$arr[] = $number;
$number ++ ;
}
?>
// 1、二分查詢 // $arr 陣列 $low陣列key最小值 $high 陣列key最大 ,搜尋 $k 值 。 $low - $high 搜尋的範圍 // 例如 0 - 5 在陣列 第一個元素到第六個元素 之間 搜尋 $k function bin_sch($arr,$low,$high,$k){ if($low <= $high ){ $mid = intval(($low + $high)/2); if( $arr[$mid] == $k ){ return $arr[$mid]; } if( $k < $arr[$mid]){ return bin_sch($arr,$low,$mid-1,$k); } if($k > $arr[$mid]){ return bin_sch($arr,$mid+1,$high,$k); } } return ''; } // 2、二分查詢 function bin_sch2($arr,$value) { $low = 0 ; $max = count($arr) -1; $mid = ($low + $max)/2; while ($value != $arr[$mid]){ // 搜尋值 大於 之間值 if($value > $arr[$mid]){ $mid = $mid + 1; } // 搜尋值 小於 之間值 if($value < $arr[$mid]){ $mid = $mid - 1; } // 防止死迴圈 if($mid >= $max || $mid <= 0){ // 沒有找到 return -1; } } return $arr[$mid]; }