原帖地址:http://www.cnblogs.com/toby/archive/2013/05/23/3094342.html
二分法查找数组是否包含某一元素,兼容正反序,代码实现:
1 <?php
2
3 $searchValue = (int)$_GET['key'];
4
5 function search(array $array, $value)
6 {
7 $max = count($array)-1;
8 $min = 0;
9 $isAscSort = $array[$min] < $array[$max];
10
11 while (TRUE) {
12 $sum = $min+$max;
13 $midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2);
14
15 if ($max < $min) {
16 return -1;
17 } else if ($value == $array[$midKey]) {
18 return 1;
19 } else if ($value > $array[$midKey]) {
20 $isAscSort ? $min = $midKey+1 : $max = $midKey-1;
21 } else if ($value < $array[$midKey]) {
22 $isAscSort ? $max = $midKey-1 : $min = $midKey+1;
23 }
24 }
25 }
26
27 $array = array(
28 '4', '5', '7', '8', '9', '10', '11', '12'
29 );
30 // 正序
31 echo search($array, $searchValue);
32
33 // 逆序
34 rsort($array);
35 echo search($array, $searchValue);
这个之前搜过,看过百度百科的例子(Java的实现),还有一些其他技术宅写的Code,都有问题,根本就没实现,这些人不测试就放出来误导人,大家可以去搜搜看下,昨天闲来无事就自己写一个分享给大家。
这个没考虑非顺序键的数组,主要是方法,如果需要大家可以自己扩展下。
![](https://i-blog.csdnimg.cn/blog_migrate/b365a795e0508b9bb3ec588f5002c385.jpeg)