解析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 相关文章推荐
php5数字型字符串加解密代码
Apr 24 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
PHP header函数分析详解
Aug 06 PHP
php中定时计划任务的实现原理
Jan 08 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
php轻松实现文件上传功能
Mar 03 PHP
php图片添加文字水印实现代码
Mar 15 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
PHP常用的三种设计模式
Feb 17 PHP
浅谈Laravel核心解读之Console内核
Dec 02 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开发负载均衡指南
2010/07/17 PHP
php魔术变量用法实例详解
2014/11/13 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
2013/10/10 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
pygame学习笔记(5):游戏精灵
2015/04/15 Python
Python中表示字符串的三种方法
2017/09/06 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
软件测试面试题
2015/10/21 面试题
自荐信如何“自荐”
2013/10/24 职场文书
收款委托书
2014/10/14 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
收银员岗位职责范本
2015/04/07 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript