解析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获取post中的json数据的实现方法
Jun 08 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 PHP
php网站判断用户是否是手机访问的方法
Nov 01 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
php自定义错误处理用法实例
Mar 20 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
双冒号 ::在PHP中的使用情况
Nov 05 PHP
php tpl模板引擎定义与使用示例
Aug 09 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 24 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
python 自动重连wifi windows的方法
2018/12/18 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
PyQt5实现登录页面
2020/05/30 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
上课打牌的检讨书
2014/02/15 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
村安全生产责任书
2014/08/25 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
家长学校教学计划
2015/01/19 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
Java使用HttpClient实现文件下载
2022/08/14 Java/Android