1 <?php 2 /** 3 * 查找 4 * 5 **/ 6 // 顺序查找 7 function normal_search($arrData,$val) { 8 $len = count($arrData); 9 if($len == 0) return -1; 10 for($i = 0;$i < $len; $i++ ) { 11 echo "find No.",$i + 1," value = ",$arrData[$i]," is = ",$val,"? <br/>"; 12 // 找到了 13 if($arrData[$i] == $val) return $i; 14 } 15 return -1; 16 } 17 18 // 测试顺序查找 19 $arrData = array(4,51,6,73,2,5,9,33,50,3,4,6,1,4,67); 20 echo normal_search($arrData,6),"<br/>"; 21 echo normal_search($arrData,66),"<br/>"; 22 23 // 二分法查找(针对有序的列进行查找) 24 function binary_search($arrData,$val) { 25 $len = count($arrData); 26 if($len == 0) return -1; 27 28 $start = 0; 29 $end = $len - 1; 30 31 while($start <= $end) { 32 $middle = intval(($start + $end)/2); 33 echo "start = ",$start," end = ",$end," middle = ",$middle,"<br/>"; 34 if($arrData[$middle] == $val) { 35 return $middle; 36 } elseif ($arrData[$middle] > $val) { 37 $end = $middle - 1 ; 38 } elseif ($arrData[$middle] < $val) { 39 $start = $middle + 1; 40 } 41 } 42 return -1; 43 } 44 45 // 测试一下二分法查找 46 $arrData = array(1,2,3,4,5,7,8,9,11,23,56,100,104,578,1000); 47 echo binary_search($arrData,578),"<br/>"; 48 echo binary_search($arrData,66),"<br/>";