解析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的FTP学习(一)[转自奥索]
Oct 09 PHP
PHP+APACHE实现用户论证的方法
Oct 09 PHP
php仿discuz分页效果代码
Oct 02 PHP
PHP 身份证号验证函数
May 07 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php数字运算验证码的实现代码
Jul 30 PHP
PHP中trait使用方法详细介绍
May 21 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
php将xml转化对象的实例详解
Nov 17 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/11/19 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
PHP反射API示例分享
2016/10/08 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
JavaScript Split()方法
2015/12/18 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
angularjs实现天气预报功能
2020/06/16 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
python实现的udp协议Server和Client代码实例
2014/06/04 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
python 产生token及token验证的方法
2018/12/26 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
高中历史教学反思
2014/02/08 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL