解析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中读取和写入WORD文档的代码
Apr 09 PHP
PHP 柱状图实现代码
Dec 04 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 PHP
PHP批量删除jQuery操作
Jul 23 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 PHP
php实现推荐功能的简单实例
Sep 29 PHP
PHP实现递归的三种方法
Jul 04 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 26 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
一个ftp类(ini.php)
2006/10/09 PHP
怎么样可以把 phpinfo()屏蔽掉?
2006/11/24 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
2007/09/04 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
Python 正则表达式操作指南
2009/05/04 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Python中装饰器高级用法详解
2017/12/25 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
Python基于template实现字符串替换
2020/11/27 Python
Django 实现图片上传和下载功能
2020/12/31 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
英语专业毕业个人求职自荐信
2013/09/21 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
运动会主持词大全
2015/07/02 职场文书
公司周年庆典致辞
2015/07/30 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang