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)。

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

相关推荐
ShineWinsu6 分钟前
对于C++:继承的解析—上
开发语言·数据结构·c++·算法·面试·笔试·继承
pp起床17 分钟前
动态规划 | part05
算法·动态规划
小付同学呀21 分钟前
C语言学习(五)——输入/输出
c语言·开发语言·学习
GuangHeAI_ATing26 分钟前
国密算法SSD怎么选?这3款国产固态硬盘安全又高速
算法
梦幻精灵_cq1 小时前
学C之路:不可或缺的main()主函数框架(Learn-C 1st)
c语言·开发语言
雨泪丶1 小时前
代码随想录算法训练营-Day34
算法
消失的旧时光-19431 小时前
C++ 多线程与并发系统取向(二)—— 资源保护:std::mutex 与 RAII(类比 Java synchronized)
java·开发语言·c++·并发
Yzzz-F1 小时前
牛客寒假算法训练营2
算法
甄心爱学习1 小时前
【python】获取所有长度为 k 的二进制字符串
python·算法
iAkuya2 小时前
(leetcode)力扣100 76数据流的中位数(堆)
算法·leetcode·职场和发展