PHP有序表查找之二分查找(折半查找)算法示例

下面我将对“PHP有序表查找之二分查找(折半查找)算法示例”的完整攻略进行详细讲解。

一、什么是二分查找

二分查找又称为折半查找,是一种在有序数组中查找某一特定元素的搜索算法。基本思想是:将有序数组分成两部分,如果要查找的元素比数组中间的元素小,则在左半部分继续查找;如果要查找的元素比数组中间的元素大,则在右半部分继续查找,直到找到或者查找结束。

二分查找算法的时间复杂度为 O(logn),比简单查找算法 O(n) 更快。

二、二分查找的实现

下面,我们以 PHP 语言为例,演示如何实现二分查找算法。

1. 二分查找示例一

function binarySearch($arr, $val) {
    $left = 0;
    $right = count($arr) - 1;
    while ($left <= $right) {
        $mid = intval(($left + $right) / 2);
        if ($arr[$mid] === $val) {
            return $mid;
        } elseif ($arr[$mid] < $val) {
            $left = $mid + 1;
        } else {
            $right = $mid - 1;
        }
    }
    return -1;
}

$arr = [3, 7, 8, 13, 23, 27, 34, 38, 42, 45, 53, 57, 69, 78];
$val = 42;

$key = binarySearch($arr, $val);

if ($key == -1) {
    echo '查找失败!';
} else {
    echo '数值 ' . $val . ' 在数组中的索引位置是 ' . $key . '。';
}

上面的代码实现了一个二分查找函数 binarySearch(),使用该函数可查找数组 $arr 中是否存在数值 $val。如果存在,返回该数值在数组中的索引位置;如果不存在,返回 -1。

在上面的示例中,我们先定义了一个有序数组 $arr,然后将 $val 设为 42。最后,调用 binarySearch() 函数进行查找,并根据返回结果输出查找结果。

2. 二分查找示例二

下面是另一个示例,演示如何使用二分查找算法在一个多维数组中查找某个字符串。

function binarySearchMultiArray($array, $searchStr) {
    $left = 0;
    $right = count($array) - 1;
    while ($left <= $right) {
        $mid = intval(($left + $right) / 2);
        $item = $array[$mid];
        $compare = strcmp($searchStr, $item['str']);
        if ($compare === 0) {
            return $mid;
        } elseif ($compare < 0) {
            $right = $mid - 1;
        } else {
            $left = $mid + 1;
        }
    }
    return -1;
}

$multiArray = [
    ['id' => 1, 'str' => 'apple'],
    ['id' => 2, 'str' => 'banana'],
    ['id' => 3, 'str' => 'cherry'],
    ['id' => 4, 'str' => 'durian'],
    ['id' => 5, 'str' => 'elderberry'],
    ['id' => 6, 'str' => 'fig'],
    ['id' => 7, 'str' => 'grape'],
    ['id' => 8, 'str' => 'honeydew'],
];

$searchStr = 'fig';

$key = binarySearchMultiArray($multiArray, $searchStr);

if ($key == -1) {
    echo '查找失败!';
} else {
    echo '字符串 ' . $searchStr . ' 在多维数组中的索引位置是 ' . $key . '。';
}

在上面的示例中,我们定义了一个多维数组 $multiArray,然后使用 binarySearchMultiArray() 函数查找数组中是否存在字符串 $searchStr。如果存在,则返回该字符串在数组中的索引位置;否则返回 -1。最后,根据函数返回结果输出查找结果。

三、小结

二分查找算法是一种重要的搜索算法,它可以在有序数组中快速查找某个元素。在实际开发中,我们可以根据不同的需求,灵活应用二分查找算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP有序表查找之二分查找(折半查找)算法示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 解析左右值无限分类的实现算法

    下面为你详细讲解“解析左右值无限分类的实现算法”的完整攻略: 1. 了解左右值无限分类 左右值无限分类,也称为嵌套集合模型,是一种常见的无限分类方式。在该模型中,每个分类都有一个左值和右值,通过比较左右值大小,可以判断出一个分类是否是另一个分类的子分类或者父分类。支持多层级分类,可以无限嵌套。 2. 左右值无限分类的实现算法 左右值无限分类的实现算法分为两步…

    算法与数据结构 2023年5月19日
    00
  • C++实现广度优先搜索实例

    C++实现广度优先搜索实例攻略 什么是广度优先搜索? 广度优先搜索(Breadth-First Search,也称之为BFS)是一种基于图的搜索算法,用于访问位于某个特定顶点距离为K的所有顶点。它广泛应用于树和图的数据结构中。 BFS的过程如下: 从源节点开始遍历; 访问相邻的节点; 将相邻节点加入队列; 标记已访问的节点; 重复步骤2-4,直到队列为空。 …

    算法与数据结构 2023年5月19日
    00
  • JavaScript数组排序的六种常见算法总结

    JavaScript数组排序的六种常见算法总结 一、排序算法简介 排序算法是计算机学科中最基本的算法之一,也是编程中必须要了解的重要内容。在JavaScript编程中,排序算法的应用非常广泛,尤其是在处理和展现数据方面。 二、排序算法分类 根据不同的排序方式和算法思想, 排序算法可以被分类为以下六类。 冒泡排序 选择排序 插入排序 快速排序 归并排序 希尔排…

    算法与数据结构 2023年5月19日
    00
  • JS实现给数组对象排序的方法分析

    下面是一份详细讲解“JS实现给数组对象排序的方法分析”的攻略。 一、前言 数组是 JavaScript 中非常常见的一种数据结构,它可以用来存储一系列的数据。而在实际的开发过程中,我们会经常需要对数组进行排序,这里我们就来详细讲解一下如何使用 JavaScript 实现给数组对象排序的方法。 二、排序方法详解 JavaScript 提供了三个内置的方法来对数…

    算法与数据结构 2023年5月19日
    00
  • JS排序之快速排序详解

    JS排序之快速排序详解 快速排序是一种高效的排序算法,它的核心思想是分治。快排的具体步骤如下: 选择一个基准元素,将序列中所有元素和这个基准元素进行比较,将比基准元素小的元素放入左侧序列,将比基准元素大的元素放入右侧序列。 递归地对左右两个子序列进行快速排序,直到每个子序列只有一个元素或者为空。 示例1:将序列[3,1,6,4,8,2,5,7]进行快速排序。…

    算法与数据结构 2023年5月19日
    00
  • 浅谈2路插入排序算法及其简单实现

    浅谈2路插入排序算法及其简单实现 概述 2路插入排序算法是插入排序算法的一种变体,其主要思想是将待排序数据集分成两个子序列,分别进行插入排序,最后将两个排好序的子序列合并成一个有序序列。2路插入排序算法比普通的插入排序算法在特定数据集下可以获得更好的排序效果。 实现思路 2路插入排序算法可以分为以下几个步骤: 将待排序数据集按照大小分成两个子序列,分别进行插…

    算法与数据结构 2023年5月19日
    00
  • 基于python进行桶排序与基数排序的总结

    基于python进行桶排序与基数排序的总结 桶排序 桶排序是一种稳定的排序算法,利用预先定义的桶按照一定的映射关系将待排序的元素分配到不同的桶中,并对每个桶中的元素进行排序,最后将所有桶中的结果合并起来即可。 具体的步骤如下: 找出待排序数组中的最大值max和最小值min,确定所需桶的数量,建立一个包含顺序桶的桶(列表)bucket和一个空列表result。…

    算法与数据结构 2023年5月19日
    00
  • 常用的 JS 排序算法 整理版

    下面是对“常用的JS排序算法 整理版”的完整攻略的详细讲解。 一、排序算法介绍 排序是计算机科学中的一个基本问题,它的目的是对一组元素进行升序或降序排列。JS中常用的排序算法包括 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序等。 二、常用排序算法示例 下面是两个常用排序算法的示例: 1. 冒泡排序 冒泡排序是一种简单的排序算法,它重复遍历要排序…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部