解析php二分法查找数组是否包含某一元素

 更新时间:2013年05月23日 11:33:36   作者:  
本篇文章是对在php中二分法查找数组是否包含某一元素进行了详细的分析介绍,需要的朋友参考下
二分法查找数组是否包含某一元素,兼容正反序,代码实现:
复制代码 代码如下:

<?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远程连接MYSQL数据库非常慢的解决方法

    PHP远程连接MYSQL数据库非常慢的解决方法

    如果一个问题出现两次,那么这个问题就值得去研究下了,上次客户说MYSQL数据库很慢,我还在想,不会是PHP的问题吧?
    2008-07-07
  • PHP is_subclass_of函数的一个BUG和解决方法

    PHP is_subclass_of函数的一个BUG和解决方法

    这篇文章主要介绍了PHP is_subclass_of函数的一个BUG和解决方法,这个BUG存在于php5.3.7版本以前,并且针对interface方面,需要的朋友可以参考下
    2014-06-06
  • PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

    PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

    本文主要对PHP的CURL方法curl_setopt()函数案例进行介绍:1.抓取网页的简单案例;2.POST数据案例...下面就跟小编一起来看下吧
    2016-12-12
  • Swoole 5将移除自动添加Event::wait()特性详解

    Swoole 5将移除自动添加Event::wait()特性详解

    这篇文章主要给大家介绍了关于Swoole 5将移除自动添加Event::wait()特性的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Swoole5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • PHP中全面阻止SQL注入式攻击分析小结

    PHP中全面阻止SQL注入式攻击分析小结

    PHP是一种力量强大但相当容易学习的服务器端脚本语言,即使是经验不多的程序员也能够使用它来创建复杂的动态的web站点。然而,它在实现因特网服务的秘密和安全方面却常常存在许多困难
    2012-01-01
  • PHP入门学习之字符串操作

    PHP入门学习之字符串操作

    这篇文章主要介绍了PHP入门学习之字符串操作,学习php的同学一定要看一下,都是入门必看的基础内容
    2021-04-04
  • php消息队列实现详解

    php消息队列实现详解

    消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读出。通过消息队列,应用程序可独立地执行,它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息
    2022-08-08
  • snoopy 强大的PHP采集类使用实例代码

    snoopy 强大的PHP采集类使用实例代码

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。
    2010-12-12
  • 说明的比较细的php 正则学习实例

    说明的比较细的php 正则学习实例

    首先,让我们看看两个特别的字符:’^’ 和 ‘$’ 他们是分别用来匹配字符串的开始和结束,一下分别举例说明
    2008-07-07
  • php实现字符串翻转的方法

    php实现字符串翻转的方法

    这篇文章主要介绍了php实现字符串翻转的方法,涉及php操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论