二分查找(折半查找)

二分查找/折半查找

      • 概述
      • 查找步骤
      • 代码示例
      • 输出结果

概述

二分查找(Binary Search)的前提是待查找的数据已经排好序。通过将待查找区间划分为两部分,并将目标值与中间值进行比较,可以确定目标值在左侧区间或右侧区间。然后将查找区间缩小一半,重复进行比较和缩小区间的操作,直到找到目标值或者确定目标值不存在。

查找步骤

在这里插入图片描述

二分查找的步骤如下:

  1. 确定查找区间的起始位置和结束位置,初始时起始位置为0,结束位置为数组长度减1。

  2. 计算出中间位置(可以通过起始位置和结束位置的和除以2得到)。

  3. 比较中间位置的值与目标值的大小。

    • 如果中间位置的值等于目标值,那么找到了目标值,返回对应索引。

    • 如果中间位置的值大于目标值,那么目标值可能在左侧区间,将结束位置更新为中间位置减1,重复步骤2。

    • 如果中间位置的值小于目标值,那么目标值可能在右侧区间,将起始位置更新为中间位置加1,重复步骤2。

  4. 如果起始位置大于结束位置,表示查找区间为空,目标值不存在,返回-1或者其他表示不存在的值。

二分查找的时间复杂度为O(logn),其中n为数据的个数。相较于线性查找的O(n)时间复杂度,二分查找的效率更高。

代码示例

需求:定义一个方法利用二分查找,查询某个元素在数组中的索引
数据如下:{7, 23, 79, 81, 103, 127, 131, 147}

代码如下:

package text.text02;/*
二分查找/折半查找
核心:每次排除一半的查找范围
注意:数据必须是有序的*/
public class text07A {public static void main(String[] args) {int[] arr = {7, 23, 79, 81, 103, 127, 131, 147};//定义两个要查询的数(一个能查到,一个查不到)int number1 = 81;int number2 = 45;//调用method1方法和judge方法,并将method1的返回值(索引)和要查询的数作为参数传递给judge方法judge(method1(arr, number1), number1);    //81已经找到,在数组的的索引为:3judge(method1(arr, number2), number2);    //45没有查到!}//二分查找public static int method1(int[] arr, int number) {//定义变量记录数组的初始索引int min = 0;//定义变量记录数组长度-1,即数组的最大索引int max = arr.length - 1;while (true) {//最小索引大于最大索引,即遍历完数组都没找到if (min > max) {return -1;}//定义变量用于记录中间位置的索引int mid = (max + min) / 2;//中间的数大于要查找的数,说明要查找的数在中间的数的左边if (arr[mid] > number) {//让最大索引变为中间索引-1max = mid - 1;}//中间的数小于要查找的数,说明要查找的数在中间的数的右边else if (arr[mid] < number) {//让最小的索引变为中间索引+1min = mid + 1;}//说明中间的索引处的数等于要查找的数else {//返回中间的索引return mid;}}}//根据返回的数判断要超查找的数存在不存在public static void judge(int index, int number) {if (index == (-1)) {System.out.println(number + "没有查到!");} else {System.out.println(number + "已经找到,在数组的的索引为:" + index);}}
}

输出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/422647.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4学习(六)实验三:a Control Plane using P4Runtime

目录 一. 实验目的二.阅读MyController.py文件1.导入P4Runtime的库2.main部分1. P4InfoHelper 实例化2. 创建交换机连接3. 设置主控制器4. 安装 P4 程序5. 写入隧道规则6. 读取表项和计数器&#xff08;注释掉的部分&#xff09;7. 定时打印隧道计数器8. 异常处理9. 关闭交换机…

如何查看苹果手机的CPU型号?

摘要 本文将介绍如何在苹果手机上查看CPU型号。通过简单的设置操作&#xff0c;您可以轻松地获取您的iPhone的CPU型号信息。此外&#xff0c;我们还将介绍一些克魔助手可以提供的其他功能&#xff0c;如内存监控、GPU性能监控和网络抓包等&#xff0c;以帮助您优化和提升iOS应…

文件操作与IO(3)

文件内容的读写--数据流 这里我们将要讲到文件操作中的重要概念--流. 之前也在C语言讲解中提到了文件流的概念---读写文件内容 分为这几步:(1)打开文件;(2)读/写文件;(3)关闭文件. 数据流主要分为字节流和字符流. 字节流:以字节为单位进行读写(代表:InputStream,OutputStrea…

2.机器学习-K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解

2️⃣机器学习-K最近邻&#xff08;k-Nearest Neighbor&#xff0c;KNN&#xff09;分类算法原理讲解 个人简介一算法概述二算法思想2.1 KNN的优缺点 三实例演示3.1电影分类3.2使用KNN算法预测 鸢(yuan)尾花 的种类3.3 预测年收入是否大于50K美元 个人简介 &#x1f3d8;️&…

InnoDB的Buffer Pool

前置概念&#xff1a;一个数据页16KB&#xff0c;一个数据页可能有多个记录&#xff0c;即使我们只需要访问一条记录&#xff0c;需要把整个数据页加载到内存中&#xff0c;加载到内存后不是直接释放&#xff0c;而是缓存到内存当中&#xff08;当然对于buffer pool的缓存是在存…

自己构建webpack+vue3+ts

先看看我的目录结构&#xff08;我全局使用TS&#xff09;&#xff1a; 一、安装配置webpack打包 安装esno npm install esnoesno 是基于 esbuild 的 TS/ESNext node 运行时,有了它&#xff0c;就可以直接通过esno *.ts的方式启动脚本&#xff0c;package.json中添加 type:…

Quartus II使用小技巧

工程结构&#xff1a; 在建立完某项设计的文件后&#xff0c;依次在其里面新建四个文件夹&#xff0c;分别为&#xff1a;rtl、qprj、msim、doc。 rtl文件夹用于存放设计的源文件。 doc文件夹用于存放设计的一些文档性的资料。 qprj文件夹用于存放quaruts 工程以及quartus生…

SAP CDS VIEW实现行列转换

需求&#xff1a; 销售订单上的业务伙伴数据都在VBPA存储&#xff0c;根据PARVW来区分是售达方或者是送达方等等&#xff0c;有时候一些报表取数时有一些条件&#xff0c;比如售达方等于xxxxx并且送达方等于xxxxx&#xff0c;这时候就不是简单的一条sql就能搞定的事了&#xf…

C++学习笔记——指针

1&#xff0c;指针的基本概念 指针的作用&#xff1a;可以通过指针间接访问内存 内存的编号是从0开始记录的&#xff0c;一般用十六进制数字表示可以利用指针变量保存地址 上图中的p就是a变量的指针&#xff0c;也可以记作*a 2&#xff0c;指针变量的定义和使用 指针变量定…

漫漫数学之旅009

文章目录 经典格言数学习题古今评注拓展学习&#xff08;一&#xff09;大数定理&#xff08;二&#xff09;伯努利级数 经典格言 真正的问题&#xff0c;不在于机器是否思考&#xff0c;而在于人们是否思考。——BF斯金纳&#xff08;B. F. Skinner&#xff09; BF斯金纳&…

力扣hot100 相交链表 超全注释 满级表达

Problem: 160. 相交链表 文章目录 思路复杂度&#x1f496; Ac Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f469;‍&#x1f3eb; 参考图解 复杂度 时间复杂度: O ( n m ) O(nm) O(nm) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( 1 ) O(1) O(…

宠物空气净化器推荐哪个好?实惠的猫用猫用净化器牌子测评

作为宠物主人&#xff0c;我们深知养宠物的乐趣和责任&#xff0c;但同时也面临着一些挑战&#xff0c;比如宠物掉毛、异味和空气质量等问题。这就是为什么越来越多的家庭选择宠物空气净化器&#xff0c;为我们创造一个清新、健康的室内环境。 无论我们多么爱我们的毛茸茸伙伴…