用java写一个二分算法

时间: 2023-08-04 21:15:33 浏览: 23
好的,下面是用 Java 实现的二分查找算法: ```java public static int binarySearch(int[] arr, int target) { int left = 0, 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; } } return -1; } ``` 该算法接受一个已经排好序的整型数组和一个目标值作为参数,返回目标值在数组中的索引,如果目标值不存在于数组中,则返回 -1。 算法核心是在每一步中将目标值与数组中间位置上的元素作比较,根据比较结果更新搜索范围,最终得到目标值的位置或者不存在的提示。
相关问题

用java写一个二分查找算法

### 回答1: 我可以为您提供一个用Java实现二分查找算法的示例代码:public class BinarySearch { public static int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left <= right) { int mid = (left + right) / 2; if (array[mid] == target) { return mid; } else if (array[mid] < target) { left = mid + 1; } else if (array[mid] > target) { right = mid - 1; } } return -1; } } ### 回答2: 二分查找是一种高效的查找算法,它通常应用于已排序的数组或列表中。以下是用Java编写的二分查找算法: ```java public class BinarySearch { public static int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left <= right) { int mid = (left + right) / 2; if (array[mid] == target) { return mid; } else if (array[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; // 如果找不到目标元素,则返回-1 } public static void main(String[] args) { int[] array = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; int target = 12; int result = binarySearch(array, target); if (result == -1) { System.out.println("目标元素不存在"); } else { System.out.println("目标元素在索引 " + result); } } } ``` 在以上代码中,`binarySearch`方法接受一个已排序的整数数组和一个目标值作为输入,并返回目标值在数组中的索引。算法的核心思想是将查找范围不断缩小一半,直到找到目标元素或无法再继续缩小范围为止。初始时,将左边界设置为数组的第一个元素的索引,将右边界设置为数组最后一个元素的索引。然后,计算中间元素的索引并将其与目标值进行比较。如果中间元素等于目标值,则返回其索引。如果中间元素小于目标值,则将左边界更新为中间元素的索引加1。如果中间元素大于目标值,则将右边界更新为中间元素的索引减1。通过不断缩小范围,最终目标元素要么被找到并返回其索引,要么返回-1表示未找到目标元素。在本例中,目标元素12在数组中的索引为5,因此程序会打印出"目标元素在索引 5"。 ### 回答3: 二分查找算法,又称折半查找算法,是一种高效的查找算法。它通过将查找区间逐渐缩小,最终定位到目标值所在的位置,或者确定目标值不存在。 以下是使用Java语言编写的二分查找算法: ```java public class BinarySearch { public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) { return mid; // 目标值在中间位置 } if (arr[mid] < target) { left = mid + 1; // 目标值在右半部分 } else { right = mid - 1; // 目标值在左半部分 } } return -1; // 目标值不存在 } public static void main(String[] args) { int[] arr = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91}; int target = 23; int index = binarySearch(arr, target); if (index != -1) { System.out.println("目标值 " + target + " 在数组中的索引位置为 " + index); } else { System.out.println("目标值 " + target + " 不存在于数组中"); } } } ``` 上述代码中,binarySearch方法接收一个有序数组arr和目标值target作为参数,并返回目标值在数组中的索引位置,如果目标值不存在,则返回-1。 在主函数中,我们通过调用binarySearch方法实现了对有序数组的二分查找,并对查找结果进行了输出。对于给定的示例数组{2, 5, 8, 12, 16, 23, 38, 56, 72, 91},我们要查找的目标值为23。运行程序后,输出结果为"目标值 23 在数组中的索引位置为 5",这表明目标值23的确存在于数组中,并且索引位置为5。

用Java写一个二分查找算法

可以这样实现:public int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left <= right) { int mid = (left + right) / 2; if (array[mid] == target) { return mid; } else if (array[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; }

相关推荐

### 回答1: 好的,我可以回答这个问题。以下是一个用 Java 实现的二分查找算法: java public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } 这个算法接收一个已排序的整数数组 arr 和一个目标整数 target,返回目标整数在数组中的下标,如果目标整数不在数组中,则返回 -1。该算法使用了二分查找的思想,在每一轮循环中通过比较目标整数和数组中间位置的数,缩小查找范围,最终找到目标整数或者确定目标整数不在数组中。 ### 回答2: 二分查找(Binary Search)是一种在有序数组中查找特定元素的算法。它通过将数组分成两部分,并比较所需的元素与数组中间元素的值来确定该元素是否存在于数组中。 以下是使用Java编写的一个简单的二分查找例子: java public class BinarySearch { public static int binarySearch(int[] arr, int key) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == key) { return mid; } if (arr[mid] < key) { left = mid + 1; } else { right = mid - 1; } } return -1; } public static void main(String[] args) { int[] arr = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; int key = 12; int result = binarySearch(arr, key); if (result == -1) { System.out.println("元素不在数组中"); } else { System.out.println("元素在数组中的索引位置为: " + result); } } } 上述代码中,binarySearch方法接收一个有序整数数组arr和要查找的关键字key作为参数,返回关键字在数组中的索引,如果不存在,则返回-1。 使用循环和逐步缩小搜索范围的策略,该算法在每一次迭代中将数组分成两部分,并通过比较关键字和数组中间元素的值来决定进一步搜索的方向。如果中间元素等于关键字,则返回该元素的索引;如果中间元素小于关键字,则在右半部分继续搜索;如果中间元素大于关键字,则在左半部分继续搜索。最终,如果未找到关键字,则返回-1。 在上述示例代码中,我们搜索有序数组arr中的关键字12,并输出结果为“元素在数组中的索引位置为: 5”。这意味着关键字12在数组中的索引为5。 ### 回答3: 二分查找是一种在有序数组中查找目标值的算法。下面是使用Java语言编写一个简单的二分查找算法的示例代码: java public class BinarySearch { public static int binarySearch(int[] arr, int target) { int left = 0; // 左边界 int right = arr.length - 1; // 右边界 while (left <= right) { int mid = left + (right - left) / 2; // 计算中间索引 if (arr[mid] == target) { return mid; // 如果中间元素等于目标值,则返回该索引 } if (arr[mid] < target) { left = mid + 1; // 如果中间元素小于目标值,则将左边界移动到中间索引后一位 } else { right = mid - 1; // 如果中间元素大于目标值,则将右边界移动到中间索引前一位 } } return -1; // 如果未找到目标值,则返回-1 } public static void main(String[] args) { int[] arr = {2, 4, 6, 8, 10, 12}; int target = 8; int result = binarySearch(arr, target); if (result == -1) { System.out.println("目标值未找到"); } else { System.out.println("目标值在索引 " + result + " 处找到"); } } } 以上代码演示了如何使用二分查找在有序数组中查找目标值。在main()方法中,定义了一个有序数组arr和目标值target。然后调用binarySearch()方法执行二分查找,找到目标值的索引并返回。最后根据返回值输出结果。如果返回-1表示目标值未找到,否则输出目标值在数组中的索引位置。

最新推荐

干货!MySQL 数据库开发规范.docx

你真的会写一手好SQL吗?你真的深入了解数据库吗?你真的对MYSQL很理解吗?来自一线大厂资深数据库开发工程师的分享,纯粹干货,值得拥有。

数据库基础创建的时候错误信息排查

创建的时候错误信息排查

电动车与储能2023年二季度投资策略:行业竞争加剧,关注需求复苏.pdf

电动车与储能2023年二季度投资策略:行业竞争加剧,关注需求复苏.pdf

合同管理台账 (1).xls

合同管理台账 (1).xls

RBF分类MATLAB程序(含完整程序及数据)

RBF分类matlab程序,注释详细,亲测好用!

基于51单片机的usb键盘设计与实现(1).doc

基于51单片机的usb键盘设计与实现(1).doc

"海洋环境知识提取与表示:专用导航应用体系结构建模"

对海洋环境知识提取和表示的贡献引用此版本:迪厄多娜·察查。对海洋环境知识提取和表示的贡献:提出了一个专门用于导航应用的体系结构。建模和模拟。西布列塔尼大学-布雷斯特,2014年。法语。NNT:2014BRES0118。电话:02148222HAL ID:电话:02148222https://theses.hal.science/tel-02148222提交日期:2019年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire论文/西布列塔尼大学由布列塔尼欧洲大学盖章要获得标题西布列塔尼大学博士(博士)专业:计算机科学海洋科学博士学院对海洋环境知识的提取和表示的贡献体系结构的建议专用于应用程序导航。提交人迪厄多内·察察在联合研究单位编制(EA编号3634)海军学院

react中antd组件库里有个 rangepicker 我需要默认显示的当前月1号到最后一号的数据 要求选择不同月的时候 开始时间为一号 结束时间为选定的那个月的最后一号

你可以使用 RangePicker 的 defaultValue 属性来设置默认值。具体来说,你可以使用 moment.js 库来获取当前月份和最后一天的日期,然后将它们设置为 RangePicker 的 defaultValue。当用户选择不同的月份时,你可以在 onChange 回调中获取用户选择的月份,然后使用 moment.js 计算出该月份的第一天和最后一天,更新 RangePicker 的 value 属性。 以下是示例代码: ```jsx import { useState } from 'react'; import { DatePicker } from 'antd';

基于plc的楼宇恒压供水系统学位论文.doc

基于plc的楼宇恒压供水系统学位论文.doc

"用于对齐和识别的3D模型计算机视觉与模式识别"

表示用于对齐和识别的3D模型马蒂厄·奥布里引用此版本:马蒂厄·奥布里表示用于对齐和识别的3D模型计算机视觉与模式识别[cs.CV].巴黎高等师范学校,2015年。英语NNT:2015ENSU0006。电话:01160300v2HAL Id:tel-01160300https://theses.hal.science/tel-01160300v22018年4月11日提交HAL是一个多学科的开放获取档案馆,用于存放和传播科学研究文件,无论它们是否已这些文件可能来自法国或国外的教学和研究机构,或来自公共或私人研究中心。L’archive ouverte pluridisciplinaire博士之路博士之路博士之路在获得等级时,DOCTEURDE L'ÉCOLE NORMALE SUPERIEURE博士学校ED 386:巴黎中心数学科学Discipline ou spécialité:InformatiquePrésentée et soutenue par:马蒂厄·奥布里le8 may 2015滴度表示用于对齐和识别的Unité derechercheThèse dirigée par陪审团成员équipe WILLOW(CNRS/ENS/INRIA UMR 8548)慕尼黑工业大学(TU Munich�