PHP 二分查找和顺序查找

二分查找

 1 // 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
 2 /**
 3  * 二分查找法(数组中查找某个元素)
 4  * @param array $array 要查找的数组
 5  * @param int   $low   查找的起始位置
 6  * @param array $high  查找的结束位置
 7  * @param mixed $target     要查找的目标值
 8  * @return int 存在此值返回key,不存在返回-1
 9  */
10 function bin_search($array, $low, $high, $target)
11 {
12     if ($low <= $high) {
13         $mid =  intval(($low + $high) / 2);
14         if ($array[$mid] ==  $target) {
15             return true;
16         } elseif ($target < $array[$mid]) {
17             return  bin_search($array, $low,  $mid - 1, $target);
18         } else {
19             return  bin_search($array, $mid + 1, $high, $target);
20         }
21     }
22     return false;
23 }
24 
25 // $array = [1, 3, 6, 9, 13, 18, 19, 29, 38, 47, 51, 56, 58, 59, 60, 63, 65, 69, 70, 71, 73, 75, 76, 77, 79, 89];
26 // $target = 73;
27 // $low = 0;
28 // $high = count($array) - 1;
29 // $find = bin_search($array, $low, $high, $target);
30 // var_dump($find);

顺序查找

 1 /**
 2  * 顺序查找(数组里查找某个元素)
 3  * @param array $array 要查找的数组
 4  * @param array $n 查找的结束位置 + 1
 5  * @param mixed $target 要查找的目标值
 6  */
 7 function seq_sch($array, $n, $target)
 8 {
 9     for ($i = 0; $i < $n; $i++) {
10         if ($array[$i] == $target) {
11             break;
12         }
13     }
14     if ($i < $n) {
15         return $i;
16     } else {
17         return -1;
18     }
19 }
20 
21 $array = [77, 79, 89];
22 $find = seq_sch($array, count($array), 89);
23 var_dump($find);

 

posted @ 2021-07-01 17:23  九鹤  阅读(78)  评论(0编辑  收藏  举报