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日

相关文章

  • C#实现冒泡排序和插入排序算法

    C#实现冒泡排序和插入排序算法 冒泡排序算法 冒泡排序算法是一种基本的排序算法,其基本思想是通过对相邻的元素进行比较和交换,逐渐把待排序的元素交换到相应的位置上。 在C#中,实现冒泡排序非常简单,代码示例如下: public static void BubbleSort(int[] arr) { int len = arr.Length; for (int …

    算法与数据结构 2023年5月19日
    00
  • python 如何在list中找Topk的数值和索引

    对于如何在Python的list中找Topk的数值和索引,可以采用以下方法: 方法一:使用sorted函数排序 可以使用Python内置的sorted函数对list进行排序,然后取前k个元素,同时得到它们的索引。具体代码如下: lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] k = 3 # 记录每个元素的索引和值 lst_wi…

    算法与数据结构 2023年5月19日
    00
  • 利用explain排查分析慢sql的实战案例

    对于利用explain排查分析慢SQL的实战案例,可以按照以下步骤进行。 1. 获取慢SQL 首先要获取慢SQL,即执行时间较长的SQL语句。可以在MySQL的慢查询日志中查看,也可以使用一些监控工具进行查看。获取慢SQL之后,可以通过一些工具进行格式化,让其更加可读。 2. 使用explain解析SQL 在获取慢SQL之后,接下来就是使用explain对S…

    算法与数据结构 2023年5月19日
    00
  • Java中的数组排序方式(快速排序、冒泡排序、选择排序)

    下面是Java中的数组排序方式的完整攻略。 1. 快速排序 快速排序是常用的一种排序算法,其时间复杂度为O(nlogn)。其基本思想是选择一个基准数,将数组分成左右两部分,比基准数小的放在左边,比基准数大的放在右边,然后再对左右两部分分别递归地进行快速排序。 Java中快速排序的实现基于Arrays类的sort方法。下面是一个示例代码: public sta…

    算法与数据结构 2023年5月19日
    00
  • Python实现选择排序

    当我们需要对一个列表或数组进行排序时,选择排序是一种简单易懂的方法。Python是一种非常流行的编程语言,它可以轻松实现选择排序。 以下是Python实现选择排序的攻略: 选择排序的原理 选择排序是一种简单直观的排序算法,其基本思想是每次选择出最小的元素,放到已经排好序的部分的末尾。 实现步骤 找到未排序部分的最小元素; 将其放在已排序部分的末尾; 重复步骤…

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

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

    算法与数据结构 2023年5月19日
    00
  • C#实现快速排序算法

    下面是C#实现快速排序算法的完整攻略: 快速排序算法简介 快速排序算法是一种高效的排序算法,它的时间复杂度为O(nlogn)。快速排序算法的基本思想是,通过一趟排序将待排序列分隔成独立的两部分,其中一部分的所有数据都比另外一部分小,然后再对这两部分继续进行排序,以达到整个序列有序的目的。 快速排序算法实现步骤 快速排序算法的实现步骤如下: 选择一个中间值,将…

    算法与数据结构 2023年5月19日
    00
  • 数据排序谁最快(javascript中的Array.prototype.sort PK 快速排序)

    首先,我们需要明确两个概念:Array.prototype.sort 和 快速排序算法。 Array.prototype.sort() 是 JavaScript 数组原生的排序方法,可以用于将数组中的元素按照某种规则进行排序。而快速排序算法则是一种高效的排序算法,其核心思想是通过递归将数组拆分成多个小数组,然后依次对这些小数组进行排序。 Array.prot…

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