当前位置: 首页 > article >正文

PHP顺序查找和二分查找(也叫做折半查找)算法

顺序查找(线性查找)

顺序查找是一种简单直观的查找算法,从数组的第一个元素开始,依次比较每个元素,直到找到目标元素或数组结束。

<?php
function linearSearch($array, $target) {
    $length = count($array);
    for ($i = 0; $i < $length; $i++) {
        if ($array[$i] == $target) {
            return $i; // 返回目标元素的索引
        }
    }
    return -1; // 如果未找到目标元素,返回-1
}

// 示例
$array = [2, 4, 6, 8, 10, 12, 14];
$target = 8;
$result = linearSearch($array, $target);

if ($result != -1) {
    echo "元素 $target 在数组中的索引为: $result\n";
} else {
    echo "元素 $target 不在数组中\n";
}
?>

二分查找(折半查找)

二分查找是一种高效的查找算法,要求数组必须是有序的。它通过不断将查找范围缩小一半,从而快速找到目标元素。

<?php
function binarySearch($array, $target) {
    $left = 0;
    $right = count($array) - 1;

    while ($left <= $right) {
        $mid = intdiv($left + $right, 2); // 计算中间索引

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

// 示例
$array = [2, 4, 6, 8, 10, 12, 14];
$target = 10;
$result = binarySearch($array, $target);

if ($result != -1) {
    echo "元素 $target 在数组中的索引为: $result\n";
} else {
    echo "元素 $target 不在数组中\n";
}
?>

注意事项

  1. 顺序查找
    • 适用于无序数组。
    • 时间复杂度为O(n),其中n是数组的长度。
  2. 二分查找
    • 适用于有序数组。
    • 时间复杂度为O(log n),其中n是数组的长度。
    • 数组必须是有序的,如果数组无序,需要先进行排序,排序的复杂度通常为O(n log n)。

这两个算法各有其适用的场景,选择合适的算法可以大大提高查找效率。


http://www.kler.cn/a/405122.html

相关文章:

  • 云原生之k8s服务管理
  • 图像增强夜视仪行业全面而深入的分析
  • 循环输出1~100之间的每个数
  • 【FPGA开发】ZYNQ中PS与PL交互操作总结、原理浅析、仿真操作
  • 前端测试工具详解
  • K8S资源限制之ResourceQuota
  • Block Successive Upper Bound Minimization Method(BSUM)算法
  • Android 使用 LiveData/OnCheckedChangeListener 来监听变量变化
  • C++ 并发专题 - 线程安全的单例模式
  • Apache Maven简介
  • 给机器装上“脑子”—— 一文带你玩转机器学习
  • 博导的角度看,EtherNet/IP转Profinet网关的技术实现和区别
  • 基于Java Springboot社区便民服务管理系统
  • 移动零
  • CircuitBreaker机制详解:Elasticsearch中的资源管理
  • 【GIT】TortoiseGit的变基(Rebase)操作
  • Easyexcel(1-注解使用)
  • 什么是MuLogin虚拟浏览器配置文件?它们有什么作用?
  • MongoDB 监控:确保数据库性能和可靠性
  • 【postgresql初级使用】逻辑复制是对数据库对象进行复制,非常灵活的完成数据归集与分发
  • SpringBoot3+Vue3开发图书馆管理系统
  • ZYNQ-7020嵌入式系统学习笔记(1)——使用ARM核配置UART发送Helloworld
  • 修改this.$confirm的按钮位置、图标、文字及标题
  • STM32 | ESP8266 服务器与客户端
  • SQL(四) 游标实验、存储过程、函数实验
  • 1000+ 道 Java面试题及答案整理(2024最新版)