解析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作的文本留言本的例子(五)
Oct 09 PHP
PHP新手上路(四)
Oct 09 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 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 session 错误
2009/05/21 PHP
详解PHP数组赋值方法
2015/11/07 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
js 操作css实现代码
2009/06/11 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
SQL SERVER面试资料
2013/03/30 面试题
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
医药个人求职信范文
2014/01/29 职场文书
端午节活动策划方案
2014/03/09 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
大学生自我鉴定书
2014/03/24 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
学校就业保障协议书
2019/06/24 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
python创建字典及相关管理操作
2022/04/13 Python