解析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学习 字符串课件
Jun 15 PHP
PHP 命令行参数详解及应用
May 18 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
php递归json类实例
Dec 02 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
PHP封装cURL工具类与应用示例
Jul 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
实用函数2
2007/11/08 PHP
php下删除字符串中HTML标签的函数
2008/08/27 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
使用js+jquery实现无限极联动
2013/05/23 Javascript
js 窗口抖动示例
2013/09/04 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
Puppet的一些技巧
2018/09/17 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
性能服装:HYLETE
2018/08/14 全球购物
金鑫耀Java笔试题
2014/09/06 面试题
初任培训自我鉴定
2013/10/07 职场文书
企业统计员岗位职责
2013/12/13 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
个人课题方案
2014/05/08 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
普通党员对照检查材料
2014/09/24 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
Python中常见的导入方式总结
2021/05/06 Python