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

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

相关推荐
老赵的博客10 分钟前
c++ 杂记
开发语言·c++
jimmy.hua13 分钟前
[C++刷怪笼]:set/map--优质且易操作的容器
开发语言·c++
bkspiderx1 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法
w2sfot1 小时前
Passing Arguments as an Object in JavaScript
开发语言·javascript·ecmascript
郝学胜-神的一滴2 小时前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
搞一搞汽车电子2 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
中华小当家呐2 小时前
算法之常见八大排序
数据结构·算法·排序算法
总有刁民想爱朕ha2 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘
悠悠~飘3 小时前
php简介(第一天打卡)
php
沐怡旸3 小时前
【算法--链表】114.二叉树展开为链表--通俗讲解
算法·面试