解析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利用COM对象访问SQLServer、Access
Oct 09 PHP
怎样在UNIX系统下安装php3
Oct 09 PHP
php 无法载入mysql扩展
Mar 12 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php实现mysql封装类示例
May 07 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
php数据访问之增删改查操作
May 09 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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
MySQL相关说明
2007/01/15 PHP
PHP的基本常识小结
2013/07/05 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
php函数连续调用实例分析
2015/07/30 PHP
PHP如何将XML转成数组
2016/04/04 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
Python中的默认参数详解
2015/06/24 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
售后服务承诺函格式
2015/01/21 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
网吧温馨提示
2015/07/17 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript