查找算法

 1 <?php
 2  /**
 3  sequence search
 4  从第一个元素开始,依次同每个元素比较
 5  */
 6  function seq_search($arr,$n,$k){
 7      for($i=0;$i<$n;$i++){
 8          if($arr[$i]==$k){
 9              break;
10          }
11      }
12      if($i<$n){
13          return $i;
14      }else{
15          return -1;
16      }
17  }
18  
19  /**
20  binary search 使用了递归
21  */
22  function binary_search_recursive($arr,$low,$high,$k){
23      if($low<=$high){
24          $mid=intval(($low+$high)/2);
25          if($arr[$mid]==$k){
26              return $mid;
27          }else if($arr[$mid]<$k){
28              return binary_search($arr,$mid+1,$high,$k);
29          }else{
30              return binary_search($arr,$low,$mid-1,$k);
31          }
32      }
33      return -1;
34  }
35  
36  /**
37  binary search 未使用递归
38  */
39  function binary_search($arr,$low,$high,$val){
40     $mid = floor(($low+$high)/2);
41     while($val!=$arr[$mid]&&$low<$high){
42         if($val<$arr[$mid]){
43             $high = $mid-1;
44         }
45         if($val>$arr[$mid]){
46             $low = $mid+1;
47         }
48         $mid = floor(($low+$high)/2);
49     }
50     return $val==$arr[$mid]?$mid:-1;
51  }
52  
53  $arr = array(9,6,10,2,5,3,1,8);
54  echo seq_search($arr,8,2);
55  echo '<br/>';
56  echo binary_search_recursive($arr,0,7,2);
57  echo '<br/>';
58  echo binary_search($arr,0,7,2);
59   

 

posted @ 2013-02-25 10:24  lpfuture  阅读(157)  评论(0编辑  收藏  举报