解析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 smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
php checkbox 取值详细说明
Aug 19 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP中的use关键字概述
Jul 23 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
php将xml转化对象的实例详解
Nov 17 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数据库开发知多少
2006/10/09 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
javascript 中的继承实例详解
2017/05/05 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
营销与策划应届生求职信
2013/11/04 职场文书
社团招新策划书
2014/02/04 职场文书
关于青春的演讲稿
2014/05/05 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
导游词之镇江焦山
2019/11/21 职场文书
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android