当前位置:首页 > PHP

php实现折半查找

2026-02-16 14:46:25PHP

php实现折半查找

折半查找(二分查找)简介

折半查找是一种针对有序数组的高效查找算法,时间复杂度为 O(log n)。其核心思想是通过不断缩小查找范围,逐步逼近目标值。

php实现折半查找

PHP 实现折半查找

以下是一个完整的 PHP 实现示例,包含递归和非递归两种方式:

非递归实现

function binarySearch($arr, $target) {
    $left = 0;
    $right = count($arr) - 1;

    while ($left <= $right) {
        $mid = floor(($left + $right) / 2);

        if ($arr[$mid] == $target) {
            return $mid; // 找到目标,返回索引
        } elseif ($arr[$mid] < $target) {
            $left = $mid + 1; // 目标在右半部分
        } else {
            $right = $mid - 1; // 目标在左半部分
        }
    }

    return -1; // 未找到
}

// 示例调用
$sortedArray = [1, 3, 5, 7, 9];
$result = binarySearch($sortedArray, 5); // 返回 2

递归实现

function binarySearchRecursive($arr, $target, $left, $right) {
    if ($left > $right) {
        return -1;
    }

    $mid = floor(($left + $right) / 2);

    if ($arr[$mid] == $target) {
        return $mid;
    } elseif ($arr[$mid] < $target) {
        return binarySearchRecursive($arr, $target, $mid + 1, $right);
    } else {
        return binarySearchRecursive($arr, $target, $left, $mid - 1);
    }
}

// 示例调用
$sortedArray = [1, 3, 5, 7, 9];
$result = binarySearchRecursive($sortedArray, 7, 0, count($sortedArray) - 1); // 返回 3

关键注意事项

  1. 数组必须有序:折半查找要求输入数组是升序或降序排列的,否则算法无法正常工作。
  2. 边界条件:循环或递归终止条件是 $left <= $right,避免遗漏边界值。
  3. 中间值计算:使用 floorint 确保 $mid 为整数索引。

性能优化

  • 对于超大数组,递归实现可能引发栈溢出,建议优先选择非递归方式。
  • 若查找范围较大,可通过位运算优化中间值计算:
    $mid = ($left + $right) >> 1;

标签: php
分享给朋友:

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…