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 设计模式是一种可重复使用的解决特定问题的代码设计方案,建造者模式是其中一种设计模式。下面是学习 PHP 设计模式建造者模式的攻略: 什么是建造者模式 建造者模式是一种创建型设计模式,将一个复杂对象的构建过程和它的表示分离开来,使同样的构建过程可以创建不同的表示。建造者模式通常涉及到一个抽象建造者类和具体的建造者类、指导者类和客户端类。 建造者模式的实…

    PHP 2023年5月27日
    00
  • 小程序登录之支付宝授权的实现示例

    小程序登录之支付宝授权的实现示例 一、前言 小程序是当前互联网开发的热点之一,用户进入小程序需要登录授权才能使用,而支付宝作为移动支付的龙头,支持用户使用支付宝账号在小程序中进行登录授权,本文将详细介绍小程序登录之支付宝授权的实现示例。 二、示例说明 示例一:小程序登录流程 小程序登录一般分为以下几步: 1.用户进入小程序,点击登录按钮。 2.小程序弹出登录…

    PHP 2023年5月23日
    00
  • PHP简单获取随机数的常用方法小结

    以下是“PHP简单获取随机数的常用方法小结”的完整攻略: 1. 使用 rand 函数 使用 PHP 内置的 rand 函数可以快速获取随机数。这个函数接受两个参数,分别是所需要的随机数的最小值和最大值。函数将返回一个在这个范围内的随机整数。 下面是一个例子,获取一个 1 到 100 之间的随机整数: $randomNum = rand(1, 100); ec…

    PHP 2023年5月26日
    00
  • PHP实现多进程并行操作的详解(可做守护进程)

    我可以给你详细讲解如何使用PHP实现多进程并行操作并作为守护进程运行的方法。 什么是多进程并行操作 多进程并行操作是指程序可以同时运行多个进程,每个进程可以独立地执行不同的任务。这个功能在某些场景下非常有用,特别是在需要执行耗时任务或需要处理大量数据时。对于PHP程序员来说,使用多进程并行操作可以提高程序的性能。 如何实现多进程并行操作 在PHP中,实现多进…

    PHP 2023年5月23日
    00
  • php单态设计模式(单例模式)实例

    关于“php单态设计模式(单例模式)实例”的完整攻略,我可以提供以下内容: 什么是单例模式? 单例模式是一种常见的设计模式,其核心思想是在整个应用程序中,确保某个类只有一个实例,并且提供单一的全局访问点,以方便其他对象使用。 单例模式的实现方式 单例模式的实现方式有很多种,其中比较常见的实现方式有两种: 饿汉模式 饿汉模式是指在程序启动时就立即加载并创建单例…

    PHP 2023年5月27日
    00
  • PHP导出MySQL数据到Excel文件(fputcsv)

    PHP导出MySQL数据到Excel文件(fputcsv) 概述 本篇攻略将会详细介绍使用PHP将MySQL数据导出至Excel文件的方法,采用fputcsv函数实现,其可以在CSV文件中创建一行。 准备工作 在使用该方法之前需要确保以下条件已经满足: PHP环境已经安装并配置成功 已经安装并启动MySQL数据库并成功连接它 了解fputcsv函数的使用方法…

    PHP 2023年5月26日
    00
  • PHP回调函数及匿名函数概念与用法详解

    PHP回调函数及匿名函数概念与用法详解 PHP中回调函数和匿名函数是两个非常重要概念,对于编写高效、灵活的代码非常有帮助。本篇文章将从概念、用法、示例等方面详细讲解PHP中回调函数和匿名函数的应用。 1. 概念 回调函数 回调函数是指在调用一个函数的时候,将另一个函数作为参数传入,然后在函数内部执行这个函数。通俗地讲,就是在函数内部调用一个外部函数。 匿名函…

    PHP 2023年5月27日
    00
  • 一个PHP分页类的代码

    下面是一个PHP分页类的完整攻略: 什么是分页? 分页,是指将一段较长的数据分割成若干个小的数据块,以方便用户浏览,也叫翻页。常见于各种网站的查询结果、产品列表、文章列表等。 为什么需要分页? 不分页可能会导致页面加载速度过慢,用户体验不佳;同时,对于长篇文章、产品列表等较为冗长的信息,通过分页能够更方便地进行相关信息之间的筛选和比较。 PHP分页类示例说明…

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