解析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 相关文章推荐
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
php while循环得到循环次数
Oct 26 PHP
smarty中js的调用方法示例
Oct 27 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
详解thinkphp的Auth类认证
May 28 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
PHP 远程关机实现代码
2009/11/10 PHP
php 获取客户端的真实ip
2009/11/30 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
Yii配置文件用法详解
2014/12/04 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
PHP实现一个简单url路由功能实例
2016/11/05 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
React组件refs的使用详解
2018/02/09 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
感谢信的格式
2015/01/21 职场文书
病危通知单
2015/04/17 职场文书
小学安全工作总结2015
2015/05/18 职场文书
中国合伙人观后感
2015/06/02 职场文书
论文评审意见
2015/06/05 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
Python中的 enumerate和zip详情
2022/05/30 Python