php二分查找二种实现示例

yizhihongxing

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来操作路由器的实现方法,以及两个示例说明。 一、实现方法 对于路由器的操作,一般需要使用SNMP协议进行,而PHP中有一个名为php-snmp的扩展可以帮助我们进行SNMP相关的操作。具体实现步骤如下: 1. 安装php-snmp扩展 可以通过php的包管理器(比如apt、yum、brew等)来进行安装,也可…

    PHP 2023年5月26日
    00
  • 微信小程序ajax实现请求服务器数据及模版遍历数据功能示例

    下面是详细讲解“微信小程序ajax实现请求服务器数据及模板遍历数据功能示例”的攻略: 前言 微信小程序是一种轻量级应用程序,可以在微信中运行,它采用了类似于React的组件化的编程模式,使用WXML、WXSS、JS和JSON,可以快速开发出小程序应用。 在小程序中,我们可能需要从服务器获取数据,随后将数据渲染到页面中,这就需要用到ajax技术了。下面将详细介…

    PHP 2023年5月23日
    00
  • 详解php实现页面静态化原理

    下面是“详解PHP实现页面静态化原理”的完整攻略: 1. 什么是页面静态化? 在网站开发中,通常情况下访问网站的页面都是通过动态生成的方式实现的,也就是说,每次用户请求页面时,都需要重新生成一次HTML页面。而静态化则是将页面保存为静态文件,通过直接读取静态文件的方式展示页面,从而避免了每次动态生成页面的开销。 2. 实现页面静态化的原理 实现页面静态化的一…

    PHP 2023年5月27日
    00
  • 浅析php-fpm静态和动态执行方式的比较

    浅析php-fpm静态和动态执行方式的比较 前言 php-fpm 是 PHP 官方针对处理高并发等情况下的替代 FCGI 环境的进程管理器,相较于传统的 php-cgi 方式,php-fpm 众多的优异表现,比如在性能、应对并发、改善 PHP 进程管理等方面。 php-fpm 提供了两种执行方式:静态执行和动态执行。静态方式在 PHP-FPM 启动时,根据 …

    PHP 2023年5月26日
    00
  • Mac环境下php操作mysql数据库的方法分享

    下面是Mac环境下php操作mysql数据库的方法分享的完整攻略: 1. 环境搭建 首先需要安装LAMP或MAMP环境,其中MAMP是Mac OS X下比较方便的解决方案,在安装MAMP后,我们需要在终端上进入到MAMP安装目录下的bin文件夹中,找到php的可执行文件,并将其加入到环境变量中,这样我们就可以在终端上直接使用php命令。 2. 安装mysql…

    PHP 2023年5月27日
    00
  • PHP实现将多个文件中的内容合并为新文件的方法示例

    要将多个文件中的内容合并为新文件,可以使用PHP的文件操作函数和字符串处理函数来实现。下面是实现方法的完整攻略: 使用PHP的文件操作函数打开要读取内容的原始文件,并将文件内容作为字符串储存在变量中。例如,要读取文件1.txt的内容,可以使用以下代码: $myfile1 = fopen("1.txt", "r") or…

    PHP 2023年5月26日
    00
  • php生出随机字符串

    生成随机字符串的方法很多,但是使用PHP内置函数rand或mt_rand生成随机整数的方法相对常见,我们可以利用这两个函数来生成随机字符串。下面是具体的步骤: 确定所需字符范围: 首先,我们需要先确定生成随机字符串的字符范围,可以包括字母、数字和特殊字符等。例如,我们希望所生成的随机字符串只包含数字和大写字母,那么我们需要定义一个包含这些字符的字符串,其代码…

    PHP 2023年5月26日
    00
  • PHP 中的批处理的实现

    下面将详细讲解“PHP 中的批处理的实现”的完整攻略。 1. 什么是批处理 批处理是一种自动化系统管理和执行重复性任务的方法,它将一系列命令集成在一个批处理文件中,然后批处理文件可以被批量执行,而不需要手动输入每个命令。在 PHP 中,批处理可以使用 shell_exec 函数来实现。 2. 批处理的实现步骤 2.1 创建批处理文件 首先需要创建一个批处理文…

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