二分法(Java实现)

ops/2024/9/23 20:22:51/

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

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

java">// 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.ppmy.cn/ops/24932.html

相关文章

[iOS]使用CocoaPods发布私有库

1.创建私有 Spec 仓库 首先&#xff0c;需要一个私有的 Git 仓库来存放你的 Podspec 文件&#xff0c;这个仓库用于索引你所有的私有 Pods。 在 GitHub 或其他 Git 服务上创建一个新的私有仓库&#xff0c;例如&#xff0c;名为 PrivatePodSpecs。克隆这个仓库到本地&#xf…

观成科技:蔓灵花组织加密通信研究分析总结

1.概述 蔓灵花&#xff0c;又名"Bitter"&#xff0c;常对南亚周边及孟加拉湾海域的相关国家发起网络攻击&#xff0c;主要针对巴基斯坦和中国两国。其攻击目标主要包括政府部门、核工业、能源、国防、军工、船舶工业、航空工业以及海运等行业&#xff0c;其主要意图…

解决Linux CentOS 7安装了vim编辑器却vim编辑器不起作用、无任何反应

文章目录 前言一、解决vim不起作用&#xff08;卸载重新安装&#xff09;1.重新安装vim2.测试vim是否能正常使用 二、解决vim: error while loading shared libraries: /lib64/libgpm.so.2: file too short报错三、解决vim编辑器不能使用方向键和退格键问题 remove vim-common …

未来已来:PostCSS插件让你提前使用CSS新特性

PostCSS是一个用JavaScript工具和插件生态系统来转换CSS代码的工具。它允许开发者使用现代CSS语法来编写样式&#xff0c;然后自动将它们转换为大多数浏览器能够理解的格式。 PostCSS的主要功能包括&#xff1a; 当然&#xff0c;让我们更详细地了解PostCSS的每个功能点&…

合泰杯(HT32F52352)RTC的应用(计时)--->掉电不丢失VBAT(代码已经实现附带源码)

摘要 在HT32F52352合泰单片机开发中&#xff0c;rtc在网上还是挺少人应用的&#xff0c;找了很久没什么资料&#xff0c;现在我根据手册和官方的代码进行配置理解。 RTC在嵌入式单片机中是一个很重要的应用资源。 记录事件时间戳&#xff1a;RTC可以记录事件发生的精确时间&…

亚马逊又撕开了一个新的流量大口子 | 最新快讯

文蓝海亿官网 亚马逊在美国电商市场中一马当先&#xff0c;占比 40%&#xff0c;可谓妥妥的龙头老大。 不过&#xff0c;中国“出海四小龙”&#xff08;Temu、SHEIN、TikTok、阿里速卖通&#xff09;逐渐逼近&#xff0c;它们的 GMV 加起来已经接近美国电商市场份额的 10%。 从…

【深度学习】概率图模型理论简介

概率图模型 1 概率图模型2 模型表示2.1 有向图模型(Bayesian networks 贝叶斯网络)2.2 无向图模型(Markov random fields 马尔可夫网络)参考概率图模型(Probabilistic Graphical Model,PGM)是一种用图结构来表示和推断多元随机变量之间条件独立性的概率模型。图模型提供…

「中标喜报」合众致达中标深圳安居乐寓智能水电表供货及安装项目

2024年4月25日&#xff0c;深圳合众致达科技有限公司(以下简称“我司”)成功中标安居乐寓2023盐田区保障性租赁住房改造提升项目的水电表供货与安装工程(二次)项目&#xff0c;此次中标标志着我司在城中村公寓出租房能源计费领域的专业实力及市场竞争力得到了进一步的认可。 我…