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)
上一篇 4天前
下一篇 4天前

相关文章

  • 精美漂亮的php分页类代码

    下面是关于“精美漂亮的php分页类代码”的完整攻略: 1. 了解分页类的需求 分页是一个常见的网站功能,能够让用户在大量数据中快速访问信息。因此,我们需要一个简单、易用的分页类,具有以下功能: 在页面上显示分页信息和分页按钮; 支持自定义分页按钮的数量; 支持用户自定义分页样式; 具备良好的代码可读性和可维护性; 易于集成和扩展。 2. 设计分页类的基本思路…

    PHP 2023年5月24日
    00
  • PHP文件操作详解

    PHP文件操作详解 在PHP中,通过文件操作函数可以方便地对文件进行读写操作。本文将对文件读写的一些常用操作做出详细的讲解。 文件打开 在读写文件之前,必须先将文件打开。PHP提供了以下三个打开文件的函数: fopen() 用于打开文件,返回一个资源类型的文件指针。 file() 用于将整个文件读取到一个数组中,每一行为一个数组元素。 file_get_co…

    PHP 2023年5月23日
    00
  • Redis中一些最常见的面试问题总结

    Redis中一些最常见的面试问题总结 在Redis的面试中,经常会被问到一些比较基础的问题。本文为大家总结了Redis中一些最常见的面试问题,并提供相应的解答和示例说明。 Redis中常见的数据类型有哪些? Redis中常见的数据类型包括: 字符串(string) 列表(list) 集合(set) 有序集合(sorted set) 哈希(hash) 下面是一…

    PHP 5天前
    00
  • php中echo与print区别点整理

    下面是详细讲解“php中echo与print区别点整理”的完整攻略: 1. echo和print的区别 在PHP中,echo和print都是用于将字符串输出到浏览器或者终端的命令。它们的用法很相似,但是它们在以下几个方面有明显的区别。 echo没有返回值,只是输出字符串到浏览器;print有返回值,返回值为1。 echo可以一次性输出多个字符串,中间用逗号隔…

    PHP 5天前
    00
  • php基础教程

    PHP基础教程完整攻略 PHP是一种广泛使用的服务器端脚本语言,可以创建动态的网页内容、发送和接收Cookie等。本教程将介绍PHP的基础概念,如语法、变量、运算符和控制结构等。 环境要求和安装 为了开始学习PHP,您需要一个运行PHP代码的web服务器,可以选择从下面的网址下载并安装: WAMP MAMP XAMPP 其中,XAMPP是最流行的,它支持Wi…

    PHP 2023年5月23日
    00
  • PHP将字符分解为多个字符串的方法

    要将字符串在 PHP 语言中分解成多个字符串可以使用多种方法,本文将为大家介绍其中两种最常用的方法。 1. 使用 str_split() 函数 str_split() 函数可以将字符串拆分为数组,每个数组元素为单个字符,是 PHP 中最简单的将字符串分解成字符的方法。 代码示例如下: <?php $str = "Hello World!&qu…

    PHP 5天前
    00
  • 详解各种PHP函数漏洞

    下面是详解各种PHP函数漏洞的完整攻略。 1. PHP函数漏洞概述 PHP是一种常用的Web编程语言,而PHP语言中有很多常用的函数,这些函数在网站开发中有着重要的用途。但是在使用函数的过程中会经常出现安全问题,这些问题被成为PHP函数漏洞。 PHP函数漏洞通常是由于函数使用不当或者参数传递错误导致的,在攻击者利用PHP函数漏洞之后,可以获取站点的敏感信息、…

    PHP 5天前
    00
  • PHP实现将MySQL重复ID二维数组重组为三维数组的方法

    为了方便阅读,我将对这个话题进行拆分,分别介绍“PHP如何从MySQL中获取重复ID的二维数组”和“PHP如何将重复ID的二维数组重组为三维数组”两个部分。 一、从MySQL中获取重复ID的二维数组 连接数据库 首先需要使用PHP连接MySQL数据库,可以使用mysqli或PDO等方式连接数据库。这里给出一个用mysqli进行连接和查询的示例: // 连接数…

    PHP 5天前
    00
  • 几个实用的PHP内置函数使用指南

    下面就是“几个实用的PHP内置函数使用指南”的详细讲解。 函数1:substr() 作用 substr() 函数用于从字符串中获取子字符串。 语法 substr(string $string, int $start, int $length): string|false 参数 $string:必需,要进行截取的字符串。 $start:必需,从这个位置开始截取…

    PHP 2023年5月23日
    00
  • PHP获取某个月最大天数(最后一天)的方法

    要获取某个月最大天数(最后一天),可以采用PHP中的date()、strtotime()和cal_days_in_month()等函数来实现。 下面是具体步骤: 获取当前月份的最大天数 首先,我们需要获取当前月份的最大天数。我们可以使用date()函数来获取当前月份,然后使用cal_days_in_month()函数获得当前月份的最大天数。具体代码如下: $…

    PHP 5天前
    00