解析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下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
PHP语法自动检查的Vim插件
Aug 11 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue 简单自动补全的输入框的示例
2018/03/12 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
详细解读Python中解析XML数据的方法
2015/10/15 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
python定位xpath 节点位置的方法
2019/08/27 Python
python如何绘制疫情图
2020/09/16 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
介绍一下Mysql的存储引擎
2015/02/12 面试题
卫生标语大全
2014/06/21 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
电影红河谷观后感
2015/06/11 职场文书