[php] 数据结构&算法(PHP描述) 查找&&二分法查找

 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/>";

posted on 2012-06-19 17:11  bluefrog  阅读(2223)  评论(0编辑  收藏  举报