PHP二分查找(数组内查找某个元素)

在PHP编程中,二分查找是一种高效的查找算法,可用于在有序数组中查找指定的元素。二分查找通过反复将查找区间分成两部分,并判断目标元素可能在哪一部分,从而将查找范围缩小一半。

下面是一个实现二分查找的PHP函数:

示例代码

function bin_sch($array, $low, $high, $k){   
    if ($low <= $high){   
        $mid = intval(($low+$high) / 2);   
        if ($array[$mid] == $k){   
            return $mid;   
        } elseif ($k < $array[$mid]){   
            return bin_sch($array, $low, $mid - 1, $k);   
        } else {   
            return bin_sch($array, $mid + 1, $high, $k);   
        }   
    }   
    return -1;   
}

函数详细说明

上述代码中的`bin_sch`函数接受四个参数:待查找的有序数组`$array`,查找区间的起始索引`$low`,查找区间的结束索引`$high`,以及要查找的目标元素`$k`。

函数通过递归的方式不断将查找区间分成两部分,直到找到目标元素或区间缩小为空。

使用该函数进行二分查找的步骤如下:

  1. 将待查找的有序数组和目标元素传入`bin_sch`函数进行查找。

  2. 初始时,将查找区间的起始索引设为0,结束索引设为数组长度减1。

  3. 在每一次递归中,计算查找区间的中间索引`mid`,并与目标元素`k`进行比较。

  4. 如果`array[mid]`等于`k`,则找到目标元素,返回`mid`。

  5. 如果`k`小于`array[mid]`,则将查找区间缩小为`low`到`mid-1`,并继续递归调用`bin_sch`函数。

  6. 如果`k`大于`array[mid]`,则将查找区间缩小为`mid+1`到`high`,并继续递归调用`bin_sch`函数。

  7. 如果查找区间为空(即`low > high`),则未找到目标元素,返回-1。

使用二分查找算法可以提高查找速度,尤其适用于大型有序数组。在编写代码时,需要保证数组是有序的,才能保证二分查找的正确性。因此,在使用二分查找前,需要确保待查找的数组已经按照特定的顺序进行排序。

总结

PHP二分查找是一种高效的查找算法,通过反复将查找区间分成两部分,并比较目标元素与中间元素的大小关系来缩小查找范围。在编写代码时,需保证数组有序。通过使用二分查找算法,可以加快查找速度,特别适用于大型有序数组的查找操作。

二分查找示意图


文章来源地址https://www.toymoban.com/diary/php/433.html

到此这篇关于PHP二分查找(数组内查找某个元素)的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/php/433.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
如何使用php生成word文档
上一篇 2023年10月19日 22:56
PHP数组顺序查找方法及示例-如何使用顺序查找在数组中查找元素
下一篇 2023年10月20日 11:49

相关文章

  • 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)

    二分查找到目标值然后左右找到坐标 问题在于:找左右坐标的时候时间复杂度不是 O(logN) 之前提到过二分查找不仅可找到相等的数值,更关键的是 它可以将数组分为截然不同的两种情况 ,因此我们可以借助这个性质找到 第一个大于等于 target 的值(左下标) 和 第一个大于

    2024年01月22日
    浏览(50)
  • 二分查找:34. 在排序数组中查找元素的第一个和最后一个位置

    个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C++》《算法》 本篇文章仅是作为小白的我的一些理解,,如果有错误的地方,希望大佬们指出。 题目链接: 34. 在排序数组中查找元素的第一个和最后一个位置 本题数组元素不唯一,可能存在多个target,我们就是

    2024年02月08日
    浏览(47)
  • 二分查找实例1(在排序数组中查找元素的第一个和最后一个位置)

    给你一个按照非递减顺序排列的整数数组  nums ,和一个目标值  target 。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值  target ,返回  [-1, -1] 。 你必须设计并实现时间复杂度为  O(log n)  的算法解决此问题。 示例 1: 示例 2: 示例 3: 提示

    2024年02月09日
    浏览(44)
  • day1-数组part01| 704. 二分查找、27. 移除元素

    数组是存放在连续内存空间上的相同类型数据的集合。 数组下标从0开始 数组内存空间的地址是连续的 1、vector是顺序容器,其利用连续的内存空间来存储元素,但是其 内存空间大小是能够改变的 。 2、array是顺序容器,其也是利用连续的内存空间来存储元素,但它的 内存空

    2024年02月05日
    浏览(46)
  • 算法-二分查找、移除元素

    伪装成一个老手! 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 来源:力扣二分查找 1. Q1: 为

    2024年02月10日
    浏览(46)
  • 【算法】【算法杂谈】旋转数组的二分法查找

    当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 原问题 给定一个从小到大有序的数组,该数组存在重复的数,并且该数组可能经过旋转处理,如arr = [1,2,3,4,5,6,7]代表数组未旋

    2024年02月06日
    浏览(59)
  • 算法刷题Day1 二分查找+移除元素

    代码随想录-数组-1.数组理论基础 数组是存放在 连续内存空间 上的 相同类型 数据的 集合 优点:常数时间复杂度访问元素 缺点: 在删除或者增添元素的时候,就难免要移动其他元素的地址 ,时间复杂度为O(n) 代码随想录-数组-2.二分查找 前提条件 二分查找前提条件: 数组

    2024年02月10日
    浏览(52)
  • 算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解

    引言,少年们,大家好。在这里祝大家元旦快乐,我是博主 那一脸阳光 ,今天来介绍二分查找 在计算机科学领域,搜索算法是数据处理和问题解决的重要工具之一。其中,**二分查找算法(Binary Search)**以其卓越的时间复杂度和简洁高效的实现,在众多搜索算法中脱颖而出

    2024年01月17日
    浏览(57)
  • PHP8中查询数组中指定元素-PHP8知识详解

    php是使用最广泛的web编程语言,数组是一个数据集合,数组是一种非常常用的数据类型。在操作数组时,有时我们需要查询数组中是否有某个指定元素。在实际的程序开发中,我们用到了下列方法来查询数组中指定的元素:使用array_search()函数、使用array_column()函数、使用in

    2024年02月09日
    浏览(59)
  • 【算法刷题】—7.12二分查找应用,数组处理

    🧛‍♂️ 个人主页: 杯咖啡 💡进步是今天的活动,明天的保证! ✨目前正在学习:SSM框架,算法刷题 🙌 牛客网 ,刷算法过面试的神级网站, 用牛客你也牛。 👉免费注册和我一起学习刷题👈 🐳希望大家多多支持🥰一起进步呀! 😎Love is the one thing we’are capable of perc

    2023年04月08日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包