PHP二分查找算法示例【递归与非递归方法】

PHP二分查找算法是一种高效的查找算法,适用于已经排好序的数据集。本文将详细讲解二分查找算法的递归和非递归两种实现方式,并提供两个示例。

一、递归法实现

  1. 分析二分查找算法的工作原理:将待查找集合分成两个部分,如果中间元素等于待查找元素,则查找成功,否则比较中间元素与待查找元素,并把待查找元素对应的一半作为下一轮查找的集合。反复执行此过程直到查找到所需元素或者集合为空。

  2. 实现二分查找的递归算法:

function binarySearch(array $arr, $start, $end, $target) {
    if ($start <= $end) {
        $mid = floor(($start + $end) / 2);
        if ($arr[$mid] == $target) {
            return $mid;
        } elseif ($arr[$mid] > $target) {
            return binarySearch($arr, $start, $mid - 1, $target);
        } else {
            return binarySearch($arr, $mid + 1, $end, $target);
        }
    } else {
        return -1;
    }
}

其中,$arr是已经排序的数组,$start和$end是待查找区间的起始和终止下标,$target是待查找的元素。算法首先判断待查找区间是否为空,如果为空则返回-1表示查找失败;否则计算中间元素的下标$mid,比较中间元素与待查找元素的大小,如果相等则查找成功返回$mid,否则将待查找元素对应的一半作为下一轮查找的区间,继续执行递归查找。

  1. 示例1:查找指定元素在数组中的下标
$arr = [2, 5, 8, 11, 16, 20];
$target = 8;
$result = binarySearch($arr, 0, count($arr) - 1, $target);
if ($result == -1) {
    echo "查找失败";
} else {
    echo "查找成功,下标为" . $result;
}

在示例中,定义了数组$arr和待查找的元素$target,调用binarySearch函数进行查找,并输出查找结果。

二、非递归法实现

  1. 分析二分查找算法的工作原理:将待查找集合分成两个部分,如果中间元素等于待查找元素,则查找成功,否则比较中间元素与待查找元素,并把待查找元素对应的一半作为下一轮查找的集合。反复执行此过程直到查找到所需元素或者集合为空。

  2. 实现二分查找的非递归算法:

function binarySearch(array $arr, $target) {
    $start = 0;
    $end = count($arr) - 1;
    while ($start <= $end) {
        $mid = floor(($start + $end) / 2);
        if ($arr[$mid] == $target) {
            return $mid;
        } elseif ($arr[$mid] > $target) {
            $end = $mid - 1;
        } else {
            $start = $mid + 1;
        }
    }
    return -1;
}

其中,$arr是已经排序的数组,$target是待查找的元素。算法通过循环实现查找,每次循环计算中间元素的下标$mid,比较中间元素与待查找元素的大小,如果相等则查找成功返回$mid,否则将待查找元素对应的一半作为下一轮循环的区间。

  1. 示例2:查找指定元素在数组中的下标
$arr = [2, 5, 8, 11, 16, 20];
$target = 5;
$result = binarySearch($arr, $target);
if ($result == -1) {
    echo "查找失败";
} else {
    echo "查找成功,下标为" . $result;
}

在示例中,定义了数组$arr和待查找的元素$target,调用binarySearch函数进行查找,并输出查找结果。

以上就是二分查找算法的递归和非递归实现以及示例说明的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP二分查找算法示例【递归与非递归方法】 - Python技术站

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

相关文章

  • PHP实现判断数组是一维、二维或几维的方法

    要判断一个数组是一维、二维还是多维数组,PHP提供了多种方法,下面详细介绍几种方法实现。 方法一:利用递归判断数组维度 下面示例代码中的函数通过递归调用自身判断数组的维度,如果循环完所有元素后,仍然是一个数组,则将维度加一。 /** * 判断数组维度 * * @param array $arr * @return int */ function array_…

    PHP 2023年5月26日
    00
  • Shell脚本实现启动PHP内置FastCGI Server

    下面就详细讲解一下“Shell脚本实现启动PHP内置FastCGI Server”的完整攻略。 背景说明 FastCGI是一种通信协议,它可以将外部Web服务器和内部的Web应用服务器分离开来,以便让外部服务器可以控制多个内部Web服务器。PHP内置有FastCGI Server,通过启动PHP内置的FastCGI Server,可以搭建一个高性能的PHP网…

    PHP 2023年5月27日
    00
  • php判断数组元素中是否存在某个字符串的方法

    当需要在 PHP 中判断数组元素中是否存在某个字符串时,可以使用 in_array 函数或 array_search 函数。 使用 in_array 函数检查数组中是否存在字符串 in_array 函数可以判断给定的值是否在数组中,并返回布尔值。如果数组中存在该值,则返回 true,否则返回 false。 该函数的语法如下: in_array($needle…

    PHP 2023年5月26日
    00
  • PHP闭包函数详解

    PHP闭包函数详解 PHP闭包函数也被称为匿名函数,它是一种不具有函数名的函数,可以作为参数传递给另一个函数,或者直接作为函数返回值。闭包函数可以访问其父函数所拥有的变量,这种特性在某些特定场景下非常有用。接下来将详细讨论PHP闭包函数的定义、语法、用法和示例。 定义 在PHP中,使用function关键字定义闭包函数,如下所示: $func = funct…

    PHP 2023年5月28日
    00
  • 微信小程序url与token设置详解

    针对“微信小程序url与token设置详解”的问题,我会提供详细的攻略,并在过程中举例说明。 微信小程序url与token设置详解 什么是url与token 在使用微信小程序开发框架中,url与token是非常重要的概念。其中,url(Uniform Resource Locator),中文翻译为统一资源定位符,是一种用于描述互联网上物理位置的字符串格式的起…

    PHP 2023年5月30日
    00
  • php使用CutyCapt实现网页截图保存的方法

    下面是详细讲解“php使用CutyCapt实现网页截图保存的方法”的完整攻略: 简介 CutyCapt是一个命令行工具,可以通过URL地址截图保存成图片。将其与PHP结合使用,可以实现网页截图的自动化。 准备工作 在使用CutyCapt之前,需要先安装它。具体安装方法可以在官方网站查看。另外,还需要在PHP中执行shell命令的权限。 实现步骤 第一步:安装…

    PHP 2023年5月26日
    00
  • Laravel中间件的使用详解

    下面是“Laravel中间件的使用详解”的完整使用攻略,包括中间件的基本原理、中间件的使用方法和两个示例说明。 中间件的基本原理 在Laravel中,中间件是一种用于处理HTTP请求和响应的机制。中间件可以在请求到达应用程序之前或之后执行一些操作,如身份验证、日志记录、缓存等。 中间件的基本原理是:在请求到达应用程序之前或之后执行一些操作。中间件可以修改请求…

    PHP 2023年5月12日
    00
  • PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】

    下面是详细的攻略: PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】 背景介绍 AES是一种对称加密算法,它可以使用不同的密钥进行加密和解密。PHP7和CryptoJS都支持AES加密算法,但它们的默认实现方式不同,如果想要实现加密数据的互通,需要在两个平台上实现相同的加密方式。 在本篇攻略中,我们将介绍如何在PHP7和C…

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