二分法(Java实现)

二分法(也称为二分查找法或折半查找法)是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。

以下是一个Java实现的二分查找法,包括注释以及一些额外的细节描述,以确保内容达到约1500字的篇幅:

// BinarySearch.javapublic class BinarySearch {// 二分查找函数public static int binarySearch(int[] arr, int target) {// 检查数组是否为空if (arr == null || arr.length == 0) {return -1; // 返回-1表示未找到目标元素,且数组为空或不存在}// 定义搜索的起始和结束索引int left = 0;int right = arr.length - 1;// 当左索引小于等于右索引时,执行搜索while (left <= right) {// 计算中间索引int mid = left + (right - left) / 2; // 防止整数溢出// 检查中间元素是否为目标元素if (arr[mid] == target) {return mid; // 找到目标元素,返回其索引} else if (arr[mid] < target) {// 如果中间元素小于目标元素,则在右半部分继续搜索left = mid + 1;} else {// 如果中间元素大于目标元素,则在左半部分继续搜索right = mid - 1;}}// 如果没有找到目标元素,返回-1return -1;}// 主函数,用于测试二分查找public static void main(String[] args) {// 创建一个有序数组int[] sortedArray = {2, 3, 4, 10, 40};// 查找目标元素int target = 10;// 调用二分查找函数int result = binarySearch(sortedArray, target);// 输出结果if (result != -1) {System.out.println("找到目标元素 " + target + ",索引为 " + result);} else {System.out.println("在数组中未找到目标元素 " + target);}// 额外说明System.out.println("二分查找法是一种在有序数组中查找某一特定元素的搜索算法。");System.out.println("其工作原理是通过不断地将搜索范围减半,从而加速搜索过程。");System.out.println("这种算法的时间复杂度为O(log n),其中n是数组的长度。");System.out.println("由于二分查找要求数组必须是有序的,因此在实际应用中,");System.out.println("如果数组不是有序的,需要先进行排序操作。");// 扩展讨论:二分查找的变种和应用System.out.println("二分查找法不仅限于一维数组的查找,");System.out.println("还可以扩展到二维数组、矩阵、树形结构(如二叉搜索树)等数据结构上。");System.out.println("此外,二分查找法还常用于数值计算中,如求解方程的根、寻找函数的极值点等。");// 示例代码结束提示System.out.println("示例代码结束,感谢您阅读!");}
}

上面的代码实现了一个简单的二分查找算法,并在main函数中给出了一个示例,用于查找有序数组中的特定元素。同时,为了增加内容长度,我还在注释中加入了关于二分查找的额外说明和扩展讨论,包括其工作原理、时间复杂度、变种和应用等。这些内容不仅增加了代码的说明性,也让读者对二分查找有了更深入的了解。

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

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

相关文章

力扣-比较版本号

题目 165-比较版本号 代码 可以先将两个版本号用 “.” 分割&#xff0c;然后将得到的字符串转化为整数再逐个比较即可。 可通过 Integer.parseInt() 方法将字符串快速转化为整数&#xff0c;例如 “001”可通过该方法变成整数1&#xff0c;具体代码如下。 public int comp…

Allegro画PCB中如何旋转器件

PCB中如何旋转器件 鼠标点击器件&#xff0c;然后右击&#xff0c;选择“Rotate”&#xff0c;然后再“Options”里选择旋转的角度和旋转中心&#xff0c;如下图&#xff1a; 然后鼠标转动就可以转动器件了。

数据结构——时间复杂度与空间复杂度

文章目录 一、算法效率算法的复杂度 二、时间复杂度1.时间复杂度的概念2.大O的渐进表示法3.例子 三、空间复杂度1.空间复杂度概念2.例子 四、常见复杂度对比 一、算法效率 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。 因此…

【算法刷题 | 贪心算法07】4.29(用最少数量的箭引爆气球、无重叠区间)

文章目录 12.用最少数量的箭引爆气球12.1题目12.2解法&#xff1a;贪心12.2.1贪心思路12.2.2代码实现 13.无重叠区间13.1题目13.2解法&#xff1a;贪心13.2.1贪心思路13.2.2代码实现 12.用最少数量的箭引爆气球 12.1题目 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面…

python可视化图表

1.测试数据准备 2011年1月销售数据.txt 2011-01-01,4b34218c-9f37-4e66-b33e-327ecd5fb897,1689,湖南省 2011-01-01,5b6a6417-9a16-4243-9704-255719074bff,2353,河北省 2011-01-01,ae240260-68a9-4e59-b4c9-206be4c08a8d,2565,湖北省 2011-01-02,c833e851-880f-4e05-9de5-b5…

Flutter 有什么优异特性和革命性创新之处?

Flutter 有什么优异特性和革命性创新之处? 什么是 Flutter&#xff1f; Flutter mobile app SDK是一种新的方式来构建漂亮的原生移动应用程序&#xff0c;摆脱过去常见的“千篇一律”的应用程序。用过Flutter的人都对它赞赏有加&#xff1b; 相比较其他新型系统&#xff0c…

UI设计饱和了吗?赚钱吗?

UI设计饱和了吗&#xff1f;赚钱吗&#xff1f; 关于UI设计行业是否饱和了呢&#xff0c;这个问题其实比较有趣。在当下&#xff0c;请说出一个看起来没有饱和并且你会很想去做且能做的职业&#xff1f;有没有&#xff1f;没有&#xff01;很多人都太浮躁。眼高手低。 那么好…

如何用揿针治疗慢性咽炎?

点击文末领取揿针的视频教程跟直播讲解 在日常生活中&#xff0c;慢性咽炎极为常见&#xff0c;不致命却很恼人。一旦发作&#xff0c;你的喉咙每天都会不舒服&#xff0c;总感觉有东西堵着&#xff0c;但是呢&#xff0c;咳又咳不出来&#xff0c;咽也咽不下去&#xff0c;你…

五一劳动节,祝你劳动快乐,休息更快乐!

五一国际劳动节亦称“五一节”&#xff0c;在每年的五月一日。此节源于美国芝加哥城的工人大罢工。Labour Day also known as "51" on May 1 of each year.This section comes from the city of Chicago workers strike. 1886年5月1日&#xff0c;芝加哥的二十一万六…

Java 设计模式(结构型)

文章目录 代理模式门面模式外观模式桥接模式适配器模式享元模式装饰器模式组合模式 代理模式 代理模式是一种结构型设计模式&#xff0c;允许在访问对象时提供一种代理以控制对该对象的访问。代理模式通常在客户端和实际对象之间引入了一个代理对象&#xff0c;客户端通过代理…

opencv_23_高斯模糊

void ColorInvert::gaussian_blur(Mat& image) { Mat dst; GaussianBlur(image, dst, Size(0, 0), 15); // Size(2, 2), imshow("图像模糊2", dst); }

最新CRM系统评测:发现双重功能的好用客户关系管理系统

对于绝大多数企业来说&#xff0c;拥有强大的销售能力是实现增长、获得收益的关键。在如今企业数字化的大背景下&#xff0c;我们经常会听到关于自动化的讨论&#xff0c;也有声音会说&#xff0c;企业数字化成功与否的标准之一就是自动化程度。销售自动化&#xff08;SFA&…

集成框架 -- OSS

前言 接入oss必须有这两个文档基础 使用STS临时访问凭证访问OSS_对象存储(OSS)-阿里云帮助中心 前端上传跨域 正文 sts前后端通用&#xff0c;开通图示 AliyunSTSAssumeRoleAccess 后端实现代码 public static void main(String[] args) {String regionId "cn-ha…

Emby Notifier——一个媒体通知推送服务

Emby Notifier 这是另一个项目 watchdog_for_Emby 的最新优化版本&#xff0c;取消了 nfo 文件的监视依赖&#xff0c;该版本不再需要手动设置媒体库路径&#xff0c;对通过网盘挂载生成的媒体库更加友好~ Emby Server 版本 (重要&#xff01;&#xff01;&#xff01;) 4.8.0…

【会员单位】浙江晧月水务科技有限公司

中华环保联合会理事单位 水环境治理专业委员会副主任委员单位 公司成立于2018年3月14日&#xff0c;是专业研究废水处理业务的国家高新技术企业。 公司自主研发的脱硫废水“零排放”的技术&#xff0c;不仅适应性好&#xff0c;技术先进&#xff0c;智慧化程度高&#xff0c…

Leetcode—1041. 困于环中的机器人【中等】

2024每日刷题&#xff08;121&#xff09; Leetcode—1041. 困于环中的机器人 实现代码 class Solution { public:bool isRobotBounded(string instructions) {int x 0;int y 0;int d 0;vector<vector<int>> direction{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};for…

机遇与挑战并存的Agent

随着大模型技术的突飞猛进,如GPT-4、Baichuan-3等的问世,人们对 Agent AI 智能体的未来发展普遍持乐观态度。这些先进的语言模型极大地提升了智能体的语言理解和生成能力,使其在自然语言处理任务上接近甚至超越人类水平。同时,多模态大模型的崛起,让智能体具备了多种形式的感知…

C++二要素认证,游戏实名认证接口、金融实名认证

随着移动互联的发展&#xff0c;越来越多的企业在金融市场都想分一杯羹&#xff0c;而哪种理财产品才是人们放心的理财产品呢&#xff1f;我们都知道理财产品开户都需要上传身份证号核验和图像进行验证&#xff0c;以保证个人信息的真实性&#xff0c;那么这些是如何来判别身份…

网络安全主题纪录片

网络安全主题纪录片 文章目录 网络安全主题纪录片第四公民黑客帝国系列龙纹身女孩碟中谍系列虎胆龙威4匿名者终结者2&#xff1a;审判日东方快车谋杀案黑客国家公敌我是谁&#xff1a;没有绝对安全的系统黑客军团速度与激情系列十亿美元大劫案勒索软件的背后黑客的恐惧为什么网…

【LeetCode周赛】第 394 场周赛

目录 3120. 统计特殊字母的数量 I 简单3121. 统计特殊字母的数量 II 中等3122. 使矩阵满足条件的最少操作次数 中等3123. 最短路径中的边 困难 3120. 统计特殊字母的数量 I 简单 3120. 统计特殊字母的数量 I 分析&#xff1a; 模拟即可 代码&#xff1a; class Solution { …