解析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 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
Apache服务器无法使用的解决方法
May 08 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
PHP+AJAX实现投票功能的方法
Sep 28 PHP
PHP-FPM实现性能优化
Mar 31 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
Nov 20 PHP
vmware linux系统安装最新的php7图解
Apr 14 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 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中判断变量为空的几种方法分享
2013/08/26 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
2015/10/12 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
tab栏切换原理
2017/03/22 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
Python写的贪吃蛇游戏例子
2014/06/16 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
zooplus波兰:在线宠物店
2019/07/21 全球购物
生产部统计员岗位职责
2014/01/05 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
销售顾问岗位职责
2014/02/25 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
党的生日活动方案
2014/08/15 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
答辩状格式范本
2015/05/22 职场文书
大学生读书笔记范文
2015/07/01 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
解析目标检测之IoU
2021/06/26 Python
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis