解析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 相关文章推荐
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
精通php的十大要点(上)
Feb 04 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
Oct 16 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
php字符串的替换,分割和连接方法
May 23 PHP
php利用gd库为图片添加水印
Nov 09 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 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编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
PHP安全上传图片的方法
2015/03/21 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
jquery trim() 功能源代码
2011/02/14 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
python求素数示例分享
2014/02/16 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
办护照工作证明范本
2014/01/14 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
《将心比心》教学反思
2014/04/08 职场文书
汽车专业求职信
2014/06/05 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
故宫的导游词
2015/01/31 职场文书
道歉情书大全
2015/05/12 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android