博客
关于我
二分查找的简单实现
阅读量:626 次
发布时间:2019-03-13

本文共 1488 字,大约阅读时间需要 4 分钟。

二分查找的实现

最近,我在一次面试中遇到了一个技术题目,要求实现二分查找算法。面试官微笑着说:“小伙子,你的逻辑思维很好,我们等你回来等消息吧!”从那以后,我便开始思考如何实现这一算法。

什么是二分查找?

二分查找是一种高效的查找算法,常用于有序数组中查找特定元素的位置。假设我们有一个有序的整型数组,比如[1,2,3,4,5,6,7,8],需要查找5的位置。我们可以通过以下步骤来实现:

  • 找到数组中间的数字(这里是4),与目标值比较:
    • 如果中间数字等于目标值,直接返回下标。
    • 如果中间数字大于目标值,说明目标值位于中间数字左边。
    • 如果中间数字小于目标值,说明目标值位于中间数字右边。
  • 代码实现

    二分查找的实现方式有两种,分别是左闭右闭和左闭右开。两种实现方式的主要区别在于数组边界的选择和循环条件。

    左闭右闭实现代码如下:

    private static int binarySearch(int target, int[] arry) {
    int left = 0, right = arry.length - 1;
    while (left <= right) {
    int mid = (left + right) >> 1;
    if (arry[mid] == target) {
    return mid;
    } else if (arry[mid] < target) {
    left = mid + 1;
    } else {
    right = mid - 1;
    }
    }
    return -1;
    }

    左闭右开实现代码如下:

    private static int binarySearch(int target, int[] arry) {
    int left = 0;
    int right = arry.length;
    while (left < right) {
    int middle = (left + right) >> 1;
    if (arry[middle] > target) {
    right = middle;
    } else if (arry[middle] < target) {
    left = middle + 1;
    } else {
    return middle;
    }
    }
    return -1;
    }

    两种实现方式的主要区别在于数组的边界选择和循环条件。左闭右闭使用数组长度减一作为右边界,而左闭右开使用数组长度作为右边界。此外,循环条件也需要相应调整。

    测试示例

    为了验证二分查找的正确性,我们可以使用以下测试用例:

    示例一: 输入:nums = [-1,0,3,5,9,12], target = 9 输出:4 解释:9位于数组中,下标为4。

    示例二: 输入:nums = [-1,0,3,5,9,12], target = 2 输出:-1 解释:2不存在于数组中。

    总结

    二分查找的关键在于掌握循环条件和区间赋值的技巧。两者必须保持一致,确保算法的正确性。如果循环条件和区间赋值不统一,可能会导致逻辑错误。通过以上实现和测试示例,你可以更好地理解二分查找的工作原理,并在实际开发中灵活运用。

    转载地址:http://zveaz.baihongyu.com/

    你可能感兴趣的文章
    Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
    查看>>
    Qt笔记——QLable+QPixmap图片缩放踩坑
    查看>>
    Qt笔记——foreach与forever
    查看>>
    QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
    查看>>
    Qt知识:视图框架QGraphicsWidget详解
    查看>>
    SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
    查看>>
    Qt知识: 画刷风格
    查看>>
    QT的OpenGL渲染窗QOpenGLWidget Class
    查看>>
    QT的C++程序加载动态链接库DLL(Linux下是so)的方式
    查看>>
    QT界面操作1:如何跟踪鼠标位置?
    查看>>
    Qt环境搭建(Visual Studio)
    查看>>
    QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
    查看>>
    QT样式表——url路径
    查看>>
    QT数据库(三):QSqlQuery使用
    查看>>
    QT教程5:消息框
    查看>>
    SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
    查看>>
    pom.xml中提示web.xml is missing and <failonmissingw>...
    查看>>
    Pomelo开发中Web客户端开发API简介
    查看>>
    QT教程2:QT5的体系构架
    查看>>
    PON架构(全光网络)
    查看>>