php二分查找
1 <?php 2 3 function binarySearch($arr,$findMe) 4 { 5 if(0 == ($cnt = count($arr))){ 6 return -1; 7 } 8 $startIndex = 0; 9 $endIndex = $cnt - 1; 10 11 while($startIndex <= $endIndex){ 12 /** 13 * 直观的写法 14 * $mid = floor($startIndex + ($endIndex - $startIndex) / 2); 15 */ 16 /** 17 * 下面的写法我一下子还不明白咋回事。。 18 * 证明: 19 * 设:起始位置x,结束位置为y。则中间: 20 * x + (y - x)/2 = mid; 21 * 2x + (y - x) = 2mid; 22 * x + y = 2mid; 23 * (x + y) / 2 = mid; 24 */ 25 $mid = floor(($endIndex + $startIndex) / 2); 26 if($arr[$mid] == $findMe){ 27 return $mid; 28 } 29 if($arr[$mid] > $findMe ){ 30 $endIndex = $mid - 1; 31 }elseif($arr[$mid] < $findMe) { 32 $startIndex = $mid + 1; 33 } 34 } 35 return -1; 36 } 37 $datas = array(1,2,3,4,5,6,7,8,9,10,11); 38 $foundedIndex = binarySearch($datas,'7'); 39 var_dump($foundedIndex);