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#实现最简洁的快速排序(你绝对可以看懂)”的完整攻略。 1、什么是快速排序? 快速排序是一种常用的排序算法,其思想是将一个数组划分为两个子数组,然后分别对这两个子数组进行排序。通过不断地递归调用这个过程,最终得到有序的数组。 2、快速排序的步骤 下面是快速排序的步骤: 选择一个基准值(pivot),一般选择数组中的第一个元素。 定义两个指…

    算法与数据结构 2023年5月19日
    00
  • C/C++实现八大排序算法汇总

    C/C++实现八大排序算法汇总 简介 本文旨在介绍常用的八大排序算法并用 C/C++ 语言实现。 八大排序算法包括: 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 选择排序(Selection Sort) 快速排序(Quick Sort) 归并排序(Merge Sort) 希尔排序(Shell Sort) 堆排序(Heap S…

    算法与数据结构 2023年5月19日
    00
  • C语言实现数组元素排序方法详解

    C语言实现数组元素排序方法详解 概述 数组元素排序是C语言中常见的操作,它将数组中的元素按照一定的规则进行排序,使其符合特定的要求。常见的排序方法包括冒泡排序、插入排序、选择排序、快速排序等。 本文将详细讲解C语言实现数组元素排序的方法,包括上述四种排序方法的原理、代码实现,帮助初学者快速入门。 冒泡排序 冒泡排序是一种简单的排序方法,它依次比较相邻的两个元…

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

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

    算法与数据结构 2023年5月19日
    00
  • c# 冒泡排序算法(Bubble Sort) 附实例代码

    冒泡排序算法(Bubble Sort) 冒泡排序算法是比较简单的排序算法之一,它通过多次比较和交换相邻两个元素的位置,将整个序列逐步变得有序,因此也被称为“泡沫排序”。 算法步骤: 从序列的第一个元素开始,与第二个元素进行比较,如果第一个元素大于第二个元素,则交换这两个元素; 接着再与第三个元素进行比较,如果第二个元素大于第三个元素,则交换这两个元素; 以此…

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

    Python递归实现快速排序 快速排序是一种常用的排序算法,递归是快速排序算法的重要部分。 快速排序算法步骤 选择一个基准数(pivot)。 将待排序数组分成左右两个子数组,小于等于基准数的元素放在左边,大于基准数的元素放在右边。 递归地对左右两个子数组进行上述排序过程。 Python代码实现 def quick_sort(arr): if len(arr)…

    算法与数据结构 2023年5月19日
    00
  • 超详细解析C++实现快速排序算法的方法

    超详细解析C++实现快速排序算法的方法 什么是快速排序? 快速排序是一种高效的排序算法。因为采用了分治法的思想,利用递归实现,每次排序只需比较部分元素,而不需要像冒泡排序和插入排序那样需要从头到尾对比每个元素,因此效率非常高。 快速排序算法的基本思想 快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,使得前面的记录的关键字均小于后面的记录的关键…

    算法与数据结构 2023年5月19日
    00
  • JavaScript数组基于交换的排序示例【冒泡排序】

    下面是JavaScript数组基于交换的排序示例【冒泡排序】的完整攻略: 冒泡排序 冒泡排序是最基本的排序算法之一,它的原理是通过比较相邻的元素,将较大的元素交换到右侧,较小的元素交换到左侧,最终将整个数组按照升序排列。 下面是一份基于交换的冒泡排序代码,我们通过代码中加入注释来讲解冒泡排序的实现过程: function bubbleSort(arr) { …

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