解析php二分法查找数组是否包含某一元素


Posted in PHP onMay 23, 2013

二分法查找数组是否包含某一元素,兼容正反序,代码实现:

<?php $searchValue = (int)$_GET['key'];
 function search(array $array, $value)
 {
     $max = count($array)-1;
     $min = 0;
     $isAscSort = $array[$min] < $array[$max];
     while (TRUE) {
         $sum = $min+$max;
         $midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2);
         if ($max < $min) {
             return -1;
         } else if ($value == $array[$midKey]) {
             return 1;
         } else if ($value > $array[$midKey]) {
             $isAscSort ? $min = $midKey+1 : $max = $midKey-1;
         } else if ($value < $array[$midKey]) {
             $isAscSort ? $max = $midKey-1 : $min = $midKey+1;
         }
     }
 }
 $array = array(
     '4', '5', '7', '8', '9', '10', '11', '12'
 );
 // 正序
 echo search($array, $searchValue);
 // 逆序
 rsort($array);
 echo search($array, $searchValue);

这个之前搜过,看过百度百科的例子(Java的实现),还有一些其他技术宅写的Code,都有问题,根本就没实现,这些人不测试就放出来误导人,大家可以去搜搜看下,昨天闲来无事就自己写一个分享给大家。
这个没考虑非顺序键的数组,主要是方法,如果需要大家可以自己扩展下。
PHP 相关文章推荐
PHP中的串行化变量和序列化对象
Sep 05 PHP
PHP 基本语法格式
Dec 15 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
php格式化电话号码的方法
Apr 24 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 #PHP
php设计模式之观察者模式的应用详解
May 21 #PHP
php设计模式之命令模式的应用详解
May 21 #PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 #PHP
PHP无法访问远程mysql的问题分析及解决
May 16 #PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 #PHP
解析dedecms空间迁移步骤详解
May 15 #PHP
You might like
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
基于Django的ModelForm组件(详解)
2017/12/07 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
Java面试题汇总
2015/12/06 面试题
小学生自我鉴定
2013/10/12 职场文书
运动会稿件300字
2014/02/14 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
生日庆典策划方案
2014/06/02 职场文书
商铺消防安全责任书
2014/07/29 职场文书
期末个人总结范文
2015/02/13 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
趣味运动会加油词
2015/07/18 职场文书