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 curl常用的5个经典例子

    下面我将为您详细讲解“php curl常用的5个经典例子”的完整攻略。curl是一种很流行的用于处理网络请求的工具,而且它也是PHP中非常常用的模块。以下是五个经典的用法实例: 1.发送GET请求并获取响应内容 以下是一个简单的示例,演示了如何使用curl模块发送一个GET请求并获取响应内容的回应。 $url = ‘https://www.example.c…

    PHP 2023年5月27日
    00
  • php打印输出棋盘的实现方法

    非常感谢你的提问,以下是针对”php打印输出棋盘的实现方法”的攻略: 问题描述 本题要求通过PHP编写一个脚本,实现在控制台中打印输出棋盘的效果。 解决方案 步骤1:通过多维数组实现棋盘 首先,我们需要声明一个二维数组来存储棋盘的信息: <?php $chess_board = array( array(‘ ‘, ‘O’, ‘X’, ‘O’, ‘X’,…

    PHP 2023年5月26日
    00
  • 浅谈php使用curl模拟多线程发送请求

    当我们需要向一个接口发送大量请求时,使用curl模拟多线程发送请求是一个非常实用的方法。以下是浅谈php使用curl模拟多线程发送请求的完整攻略。 准备工作 在开始之前,我们需要确认服务器是否已安装curl,以及我们是否在PHP的配置文件中启用了curl扩展。可以使用以下命令检查curl是否已安装: curl –version 如果返回了curl的版本信息…

    PHP 2023年5月27日
    00
  • PHP入门速成(1)

    下面是详细讲解“PHP入门速成(1)”的完整攻略。 PHP入门速成(1):概述 什么是PHP? PHP指的是“PHP: Hypertext Preprocessor”,是一种在Web开发中广泛使用的服务器端脚本语言。它可以用于创建动态Web页面、Web应用程序和Web服务等。 PHP语言的特点包括易学易用、开放源代码、跨平台、性能优秀、兼容多种数据库等。 如…

    PHP 2023年5月23日
    00
  • PHP实现文件上传和下载的示例代码

    以下是“PHP实现文件上传和下载的示例代码”的完整攻略: 文件上传 第一步:编写前端上传表单 首先,在HTML文件或PHP中编写上传表单,以便用户可以选择需要上传的文件并将其发送到服务器。 <form action="upload.php" method="post" enctype="multipar…

    PHP 2023年5月23日
    00
  • php数组函数序列之in_array() – 查找数组中是否存在指定值

    让我来详细讲解一下“php数组函数序列之in_array() – 查找数组中是否存在指定值”的完整攻略。 概述 在 PHP 语言中,in_array() 函数可以用于判断一个值是否存在于一个数组中。如果存在,则返回 true,否则返回 false。 语法 in_array($needle, $haystack, $strict); 参数说明:- $needl…

    PHP 2023年5月26日
    00
  • php数组函数序列之asort() – 对数组的元素值进行升序排序,保持索引关系

    asort()是一个PHP数组函数,用于对数组的元素值进行升序排序。此函数排序后会保持原有的索引关系,也就是说,排序后的数组依旧保留着原有的键名和键值对应关系。 asort()函数的语法如下: asort(array $array , int $sort_flags = SORT_REGULAR ); 其中,第一个参数$arry表示需要排序的数组;第二个参数…

    PHP 2023年5月26日
    00
  • windows下开发并编译PHP扩展的方法

    在Windows下开发和编译PHP扩展,需要进行以下步骤: 1. 安装Visual Studio 在Windows下进行PHP扩展开发,需要一个编译器来编译C代码,而Visual Studio是一个流行的C/C++编译器,可以在官网下载并安装Visual Studio Community版本(https://visualstudio.microsoft.co…

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