解析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 xml文件操作实现代码(二)
Mar 20 PHP
PHP 时间日期操作实战
Aug 26 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
extjs之去除s.gif的影响
2010/12/25 Javascript
50个比较实用jQuery代码段
2011/09/18 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
详解Python中的动态属性和特性
2018/04/07 Python
Python向excel中写入数据的方法
2019/05/05 Python
Python实现微信机器人的方法
2019/09/06 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
高分子材料个人求职信范文
2013/09/25 职场文书
金融专业应届生求职信
2013/11/02 职场文书
采购员的工作职责
2013/12/26 职场文书
餐饮加盟计划书
2014/01/10 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
吴仁宝观后感
2015/06/09 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis