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

顺序查找(线性查找)

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

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 复制代码
<?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)。

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

相关推荐
徐行1108 分钟前
C++核心机制-this 指针传递与内存布局分析
开发语言·c++
序属秋秋秋20 分钟前
算法基础_数据结构【单链表 + 双链表 + 栈 + 队列 + 单调栈 + 单调队列】
c语言·数据结构·c++·算法
划水哥~23 分钟前
Kotlin作用域函数
开发语言·kotlin
小臭希24 分钟前
python蓝桥杯备赛常用算法模板
开发语言·python·蓝桥杯
mosaicwang29 分钟前
dnf install openssl失败的原因和解决办法
linux·运维·开发语言·python
apcipot_rain1 小时前
【密码学——基础理论与应用】李子臣编著 第五章 序列密码 课后习题
算法·密码学
不要不开心了1 小时前
sparkcore编程算子
pytorch·分布式·算法·pygame
88号技师1 小时前
【2024年最新IEEE Trans】模糊斜率熵Fuzzy Slope entropy及5种多尺度,应用于状态识别、故障诊断!
人工智能·算法·matlab·时序分析·故障诊断·信息熵·特征提取
清同趣科研2 小时前
R绘图|6种NMDS(非度量多维分析)绘图保姆级模板——NMDS从原理到绘图,看师兄这篇教程就够了
人工智能·算法
嘵奇2 小时前
Java单例模式:实现全局唯一对象的艺术
java·开发语言·单例模式