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简单实现生成txt文件到指定目录的方法

    一、简介 在 PHP 中,实现生成 .txt 文件到指定目录需要以下步骤: 生成文件名; 打开文件; 写入内容; 关闭文件。 二、步骤详解 以下是详细的代码实现过程。 生成文件名 我们可以使用日期+随机数的方式来保证文件名不重复。代码如下: $filename = "file_".date("Ymd_His").&qu…

    PHP 2023年5月26日
    00
  • Web程序工作原理详解

    Web程序工作原理详解 Web程序是建立在客户端和服务器之间的基于网络的应用程序。Web程序通常由Web服务器、应用服务器和数据存储组成。Web服务器是指用于托管Web应用程序的软件,例如常用的Apache和Nginx。而应用服务器是指Web应用程序能够运行的平台,例如Java的Tomcat和Node.js的Express等。 工作流程 Web程序的工作流程…

    PHP 2023年5月23日
    00
  • PHP 实现一种多文件上传的方法

    当需要上传多个文件时,一种常见的做法是使用多个 input type=file 标签分别上传。但使用这种方式,每个文件需要单独发送一个 HTTP 请求,会造成服务器负担过大。所以我们可以采用 PHP 实现多文件上传。 具体实现步骤如下: 在 HTML 表单中设置 enctype 属性 <form action="upload.php&quot…

    PHP 2023年5月26日
    00
  • php pcntl_fork和pcntl_fork 的用法

    下面是关于”php pcntl_fork和pcntl_fork的用法”的完整讲解攻略。 1. 什么是pcntl_fork? pcntl_fork()是php提供的一个函数,它可以在一个进程内创建一个子进程。其语法如下: int pcntl_fork(); 调用该函数,会创建一个与原来进程几乎完全相同的进程,包括代码段、数据段、堆栈。在新进程中,fork()返…

    PHP 2023年5月27日
    00
  • php方法调用模式与函数调用模式简例

    PHP方法调用模式与函数调用模式简例 在PHP中,我们可以使用方法调用模式和函数调用模式来执行函数和方法。 函数调用模式 函数调用模式是指直接调用函数,以函数名为开头,后接括号,括号中为传递给函数的参数。函数调用模式可以在任何地方调用函数,例如: function add_numbers($x, $y) { return $x + $y; } $result…

    PHP 2023年5月27日
    00
  • PHP中遇到的时区问题解决方法

    PHP中遇到的时区问题解决方法 时区问题简述 在PHP中,时区是一个非常重要的概念,它关系到日期和时间的显示、计算等功能。而由于不同地区的时区差异,所以在处理时间时,要注意时区的问题,否则会出现一些错误。具体来说,时区问题可能会在以下几个方面产生影响: 当前时间显示不正确,比如显示的时间比实际时间快或慢。 时间的计算不正确,比如两个时间段的差值不正确。 时间…

    PHP 2023年5月23日
    00
  • 浅析php中array_map和array_walk的使用对比

    以下是“浅析PHP中array_map和array_walk的使用对比”的完整攻略。 概述 array_map 和 array_walk 都是 PHP 对数组进行处理的函数,它们分别有各自的优劣点,下面我们就来对它们进行详细的对比分析。 array_map 函数 语法 array_map (callable $callback, array …$arrs…

    PHP 2023年5月26日
    00
  • 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法

    微信公众号支付是一种移动支付方式,常用于各类电商网站或其他需要在线支付的服务,并且其支付方式可以方便用户通过微信支付来完成在线支付。在接入微信公众号支付时,开发人员经常会遇到调用支付jsapi缺少参数的问题,其中包括了缺少 timeStamp 参数等。下面是详细的解决方法: 步骤一:确认公众号支付是否已开通 在开始处理 jsapi 缺少参数的问题之前,需要确…

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