二分查找法

简介: 二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

1)算法原理:

又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置
的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,
则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
(2)代码示例:

/**
 * 二分查找
 * @param srcArray 源数组
 * @param des 目标元素
 * @return 如果找到则返回索引位置,找不到则返回-1
 */
public static int binarySearch(int[] srcArray, int des) {
    //定义初始最小、最大索引
    int start = 0;
    int end = srcArray.length - 1;
    //确保不会出现重复查找,越界
    while (start <= end) {
        //计算出中间索引值  >>> 逻辑右移 也就是 int middle = (end + start)/2
        int middle = (end + start)>>>1 ;//防止溢出
 
        if (des == srcArray[middle]) {
            return middle;
            //判断下限
        } else if (des < srcArray[middle]) {
            end = middle - 1;
            //判断上限
        } else {
            start = middle + 1;
        }
    }
    //若没有,则返回-1
    return -1;
}
目录
相关文章
|
12月前
|
传感器
基于Arduino的自动浇灌系统
基于Arduino的自动浇灌系统
516 1
|
10月前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
353 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
8月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》图、查找、排序专题考点(含解析)
408考研——《数据结构》图,查找和排序专题考点选择题汇总(含解析)。
301 29
|
11月前
|
Web App开发 前端开发 JavaScript
如何在不牺牲动画效果的前提下,优化 CSS3 动画的性能?
如何在不牺牲动画效果的前提下,优化 CSS3 动画的性能?
510 58
|
10月前
|
编解码
网站视频下载工具分享
[Cobalt](https://cobalt.tools/) 是一款无广告、无跟踪器的高效媒体下载器。它支持全平台内容下载,包括B站、YouTube、Instagram等,涵盖视频、音频、字幕等格式,分辨率从480P到8K+。无需注册,直接使用,简单快捷。还提供批量下载和自定义选项,提升下载效率。
|
10月前
|
存储 机器学习/深度学习 人工智能
【AI系统】指令和存储优化
在AI编译器底层,除了广泛应用的循环优化外,还存在指令优化和存储优化两大类。指令优化通过利用硬件提供的特殊加速指令,如向量化和张量化,提高计算效率;存储优化则关注如何高效管理数据存储与访问,减少延迟,提高整体计算效率。这些技术共同作用,极大提升了AI系统的性能。
172 1
|
11月前
|
人工智能 C语言 Python
AI师傅+通义灵码=零基础小白上手python真·不是梦
作为一名不懂编程的设计师,我一直渴望掌握AI辅助设计。在快刀青衣的推荐下,我尝试了AI师傅和通义灵码,成功写出了第一个Python程序,并理解了编程的基本概念。通过AI师傅的引导和通义灵码的帮助,我顺利完成了Coursera上的Python课程,获得了两张证书。这种学习方式让编程变得不再遥不可及,为我的未来学习打开了新大门。
|
Java 关系型数据库 MySQL
数据库的连接用Java
本文介绍了如何使用Java连接MySQL数据库,包括注册JDBC驱动、创建数据库连接URL、设置数据库用户和密码、建立连接以及关闭连接的完整代码示例。
328 0
数据库的连接用Java
|
JavaScript 前端开发
checkbox中checked属性总结
checkbox中checked属性总结
334 0
|
机器学习/深度学习 算法 量子技术
未来软件开发:量子计算的革命性影响
量子计算技术正引领我们进入一个新时代,其潜力将彻底改变软件开发和计算机科学。本文介绍了量子计算的基本概念,如量子比特、叠加和纠缠,并探讨了其对软件开发的影响,包括新算法、加密安全、机器学习及药物发现等领域。为了应对这一变革,开发者需掌握量子计算原理,学习量子编程语言,并积极参与相关项目。量子计算不仅带来了巨大的机遇,也提出了新的挑战。