解析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中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
实用函数9
Nov 08 PHP
PHP 批量删除数据的方法分析
Oct 30 PHP
php中定义网站根目录的常用方法
Aug 08 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
PHP 获取文件权限函数介绍
Jul 11 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 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 超链接 抓取实现代码
2009/06/29 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
动态添加js事件实现代码
2009/03/12 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
JS交换变量的方法
2015/01/21 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
python实现K最近邻算法
2018/01/29 Python
python实现简单五子棋游戏
2019/06/18 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
python和php哪个容易学
2020/06/19 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
办理暂住证介绍信
2014/01/11 职场文书
自荐信的基本格式
2014/02/22 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
中考学习决心书
2015/02/04 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python