前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP实现二分查找算法

PHP实现二分查找算法

作者头像
用户9283430
发布2021-12-13 16:00:50
4970
发布2021-12-13 16:00:50
举报
文章被收录于专栏:用户9283430的专栏

二分查找

  二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

  首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

使用循环方式实现二分查找

复制代码
复制代码
代码语言:javascript
复制
/**
 * 二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。
 * 二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,
 * 将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。
 *
 * 循环写法
 * @param array $array      待查找的数组
 * @param int $findVal      要查找的值
 * @return int              返回找到的数组键
 */
function binarySearch($array, $findVal)
{
    // 非数组或者数组为空,直接返回-1
    if (!is_array($array) || empty($array)) {
        return -1;
    }
    // 查找区间,起点和终点
    $start = 0;
    $end = count($array) - 1;
    while ($start <= $end) {
        // 以中间点作为参照点比较,取整数
        $middle = intval(($start + $end) / 2);
 
        if ($array[$middle] > $findVal) {
            // 查找数比参照点小,则要查找的数在左半边
            // 因为 $middle 已经比较过了,这里需要减1
            $end = $middle - 1;
 
        } elseif ($array[$middle] < $findVal) {
            // 查找数比参照点大,则要查找的数在右半边
            // 因为 $middle 已经比较过了,这里需要加1
            $start = $middle + 1;
 
        } else {
            // 查找数与参照点相等,则找到返回
            return $middle;
        }
    }
    // 未找到,返回-1
    return -1;
}
 
// 调用
$array = [10,12,16,19,20,34,56,78,84,95,100];
echo binarySearch($array, 84);

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二分查找
  • 使用循环方式实现二分查找
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档