php二分查找二种实现示例

PHP二分查找的实现

什么是二分查找算法?

二分查找,也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。它将目标值与数组中间位置的元素进行比较,如比中间位置的元素大,则目标值在数组的左半部分;如比中间位置的元素小,则目标值在数组的右半部分。不停地二分数组,直到找到目标值为止。通过这种方式,能够快速地找到特定元素,提高搜索效率。

二分查找算法在PHP中的实现

示例一

以下是在PHP中实现的基本二分查找算法:

/**
 * @param array $arr 有序数组
 * @param int $key 查找值
 * @return bool|int 返回查找值的下标,未找到则返回false
 */
function binary_search(array $arr, int $key)
{
    $low = 0; // 查找范围起点下标
    $high = count($arr) - 1; // 查找范围终点下标

    while ($low <= $high) {
        $mid = intval(($low + $high) / 2); // 中间下标

        if ($key === $arr[$mid]) {
            return $mid;
        }

        if ($key < $arr[$mid]) {
            $high = $mid - 1;
        } else {
            $low = $mid + 1;
        }
    }

    return false; //未找到
}

上述代码中的参数说明如下:

array $arr:要查找的有序数组

int $key:要查找的值

这段代码中,我们使用 while 循环来实现二分查找。首先确定要查找的范围,即查找起点和查找终点的下标。接着,计算出中间下标,与查找值进行比较。如果相等,则说明已经找到了目标值,返回它的下标。如果查找值小于中间值,则目标值在数组的左半部分,修改查找终点下标为中间下标减1,继续寻找。如果查找值大于中间值,则目标值在数组的右半部分,修改查找起点下标为中间下标加1,继续寻找。当查找起点下标大于查找终点下标时,表示已经遍历整个有序数组,未找到目标值,返回false。

示例二

以下是递归方式实现的PHP二分查找算法:

/**
 * @param array $arr 有序数组
 * @param int $low 查找起点下标
 * @param int $high 查找终点下标
 * @param int $key 查找值
 * @return bool|int 返回查找值的下标,未找到则返回false
 */
function binary_search_recursive(array $arr, int $low, int $high, int $key)
{
    if ($low <= $high) {
        $mid = intval(($low + $high) / 2); // 中间下标

        if ($key === $arr[$mid]) {
            return $mid;
        }

        if ($key < $arr[$mid]) {
            return binary_search_recursive($arr, $low, $mid - 1, $key);
        } else {
            return binary_search_recursive($arr, $mid + 1, $high, $key);
        }
    }

    return false; // 未找到
}

上述代码中的参数说明如下:

array $arr:要查找的有序数组

int $low:要查找范围的起点下标

int $high:要查找范围的终点下标

int $key:要查找的值

这段代码中,我们使用递归函数来实现二分查找。递归函数的实现方式与 while 循环方式类似,递归结束的条件为查找起点下标大于查找终点下标。递归函数中的变量同样需要在递归时进行传递。

总结

在PHP中,二分查找算法是提高搜索效率的重要算法之一。我们可以使用 while 循环或递归函数来实现二分查找算法。以上是两种不同实现方式的示例,使用者可以在实现时按照自身的需要进行修改和优化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php二分查找二种实现示例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 解析php中如何调用用户自定义函数

    在 PHP 中调用用户自定义函数的过程可以分为定义函数、调用函数两部分。 定义函数 函数声明 在 PHP 中定义函数需要使用关键字 function。函数名字可以是任何标识符,规范的命名方式通常是使用小写字母和下划线,推荐使用驼峰式命名法,并且不能以数字开头。接着是一对括号,括号内可以包括参数。最后是函数体,使用一对花括号括起来。 示例一:定义一个无参数无返…

    PHP 2023年5月27日
    00
  • PHP 7.0.2 正式版发布

    PHP 7.0.2 正式版发布攻略 简介 PHP 7.0.2 (http://php.net/releases/7_0_2.php) 是 PHP 开发的最新稳定版,本文将为您介绍该版本的发布攻略。 攻略步骤 步骤一:安装 PHP 7.0.2 首先,在官方网站下载 PHP 7.0.2 的压缩包。解压后,进入解压后的目录,执行以下命令: ./configure …

    PHP 2023年5月23日
    00
  • php根据指定位置和长度获得子字符串的方法

    PHP中获得子字符串的方法可以使用字符串函数substr()。 substr()函数的基本用法 substr(string $string , int $start [, int $length ]): string 参数说明: $string:要截取的字符串 $start:开始截取的位置,若为正数则从左开始截取,若为负数则从右开始截取,例如-2表示从倒数第…

    PHP 2023年5月26日
    00
  • php实现简单的权限管理的示例代码

    下面我将详细讲解如何通过 PHP 实现简单的权限管理。 什么是权限管理? 权限管理是指在系统或网站中,对不同用户或用户组的访问和操作进行限制或授权的管理。 为什么需要权限管理? 在系统或网站中,存在着一些对不同用户或用户组可见但不同权限的内容,对于不同的用户或用户组,应该有不同的权限来限制或授权对这些内容的访问和操作,避免数据泄露和操作失误等问题。 如何实现…

    PHP 2023年5月24日
    00
  • php使用array_rand()函数从数组中随机选择一个或多个元素

    当我们需要从一个数组中随机选择一个或多个元素时,可以使用PHP内置函数array_rand()。 函数说明 array_rand() 函数用于从数组中随机取出一个或多个元素,返回随机元素的键名或键名组成的数组。该函数的基本语法为: array array_rand ( array $array [, int $num = 1 ] ) 参数说明: $array…

    PHP 2023年5月26日
    00
  • 2套5000左右热门游戏主机电脑配置推荐 经典双平台任选

    2套5000左右热门游戏主机电脑配置推荐 经典双平台任选 作为浸入式游戏体验的重要硬件之一,游戏主机电脑配置的选购对玩家来说非常重要。对于预算在5000元左右的玩家而言,也有一些不错的选择。本篇攻略将就这一预算范围内的游戏主机电脑配置进行推荐。推荐的两个方案可以分别运行经典的游戏平台,同时也能玩到目前热门的游戏。 电脑配置推荐 下面是两个电脑配置方案。方案一…

    PHP 2023年5月27日
    00
  • 微信小程序使用wxParse解析html的方法示例

    微信小程序使用wxParse解析html的方法示例 什么是wxParse wxParse是一款微信小程序富文本解析组件,可以将HTML、Markdown等格式的文本解析为小程序可显示的文本内容,支持图片,视频等多媒体内容,并且支持自定义样式。wxParse支持多种富文本类型,包括HTML,Markdown,LaTeX等,是小程序中处理富文本内容的首选解决方案…

    PHP 2023年5月23日
    00
  • Laravel框架实现redis集群的方法分析

    Laravel框架实现Redis集群的方法分析 什么是Redis集群? Redis是一款高性能的键值存储数据库,可以应用于缓存、分布式锁、计数器等方面。Redis集群是将多个Redis节点组成的一个集群,通过数据分片的方式将数据存储在多个节点中,并且实现自动的故障转移和负载均衡等功能。 Laravel框架如何实现Redis集群? 首先,需要在Laravel项…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部