如何使用二分法查找
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容介绍了"如何使用二分法查找"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、二分法查找的背景
千家信息网最后更新 2025年11月07日如何使用二分法查找
本篇内容介绍了"如何使用二分法查找"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1、二分法查找的背景
当数组或者集合中存放的元素数量非常多的时候,想要跟踪具体某个元素的位置或者是否存在,常规方式是循环每一个元素直到找到要查找的元素为止。这样的查找方式效率非常低下,这个时候需要使用二分法来实现,提高查找效率。
2、二分法查找的介绍
二分法查找(折半查找),找指定数值所在的位置
百度百科是这样介绍二分法查找的:
3、二分法查找的算法思想
假设数组是按升序排序的,对于给定的目标值aim,从数组的中间位置开始查找:1.若查找数据与中间元素值正好相等,则返回中间元素值的索引;2.若查找数值比中间值小,则以整个查找范围的前半部分作为新的查找范围;3.若查找数值比中间值大,则以整个查找范围的后半部分作为新的查找范围;注:查找成功返回索引,失败返回-1
4、代码实现
4.1 利用循环的方式实现二分法查找
public class BinarySearch { public static void main(String[] args) { // 生成一个随机数组 int[] array = suiji(); // 对随机数组排序 Arrays.sort(array); System.out.println("产生的随机数组为: " + Arrays.toString(array)); System.out.println("要进行查找的值: "); Scanner input = new Scanner(System.in); // 进行查找的目标值 int aim = input.nextInt(); // 使用二分法查找 int index = binarySearch(array, aim); System.out.println("查找的值的索引位置: " + index); } /** * 生成一个随机数组 * * @return 返回值,返回一个随机数组 */ private static int[] suiji() { // random.nextInt(n)+m 返回m到m+n-1之间的随机数 int n = new Random().nextInt(6) + 5; int[] array = new int[n]; // 循环遍历为数组赋值 for (int i = 0; i < array.length; i++) { array[i] = new Random().nextInt(100); } return array; } /** * 二分法查找 ---循环的方式实现 * * @param array 要查找的数组 * @param aim 要查找的值 * @return 返回值,成功返回索引,失败返回-1 */ private static int binarySearch(int[] array, int aim) { // 数组最小索引值 int left = 0; // 数组最大索引值 int right = array.length - 1; int mid; while (left <= right) { mid = (left + right) / 2; // 若查找数值比中间值小,则以整个查找范围的前半部分作为新的查找范围 if (aim < array[mid]) { right = mid - 1; // 若查找数值比中间值大,则以整个查找范围的后半部分作为新的查找范围 } else if (aim > array[mid]) { left = mid + 1; // 若查找数据与中间元素值正好相等,则放回中间元素值的索引 } else { return mid; } } return -1; } }代码执行结果:
产生的随机数组为: [16, 33, 40, 46, 57, 63, 65, 71, 85] 要进行查找的值: 46 查找的值的索引位置: 3
若输入的值找不到,则返回-1
产生的随机数组为: [28, 41, 47, 56, 70, 81, 85, 88, 95] 要进行查找的值: 66 查找的值的索引位置: -1
4.2 利用递归的方式实现二分法查找
public class BinarySearch3 { public static void main(String[] args) { // 生成一个随机数组 int[] array = suiji(); // 对随机数组排序 Arrays.sort(array); System.out.println("产生的随机数组为: " + Arrays.toString(array)); System.out.println("要进行查找的值: "); Scanner input = new Scanner(System.in); // 进行查找的目标值 int aim = input.nextInt(); // 使用二分法查找 int index = binarySearch(array, aim, 0, array.length - 1); System.out.println("查找的值的索引位置: " + index); } /** * 生成一个随机数组 * * @return 返回值,返回一个随机数组 */ private static int[] suiji() { // Random.nextInt(n)+m 返回m到m+n-1之间的随机数 int n = new Random().nextInt(6) + 5; int[] array = new int[n]; // 循环遍历为数组赋值 for (int i = 0; i < array.length; i++) { array[i] = new Random().nextInt(100); } return array; } /** * 二分法查找 ---递归的方式 * * @param array 要查找的数组 * @param aim 要查找的值 * @param left 左边最小值 * @param right 右边最大值 * @return 返回值,成功返回索引,失败返回-1 */ private static int binarySearch(int[] array, int aim, int left, int right) { if (aim < array[left] || aim > array[right]) { return -1; } // 找中间值 int mid = (left + right) / 2; if (array[mid] == aim) { return mid; } else if (array[mid] > aim) { //如果中间值大于要找的值则从左边一半继续递归 return binarySearch(array, aim, left, mid - 1); } else { //如果中间值小于要找的值则从右边一半继续递归 return binarySearch(array, aim, mid + 1, array.length-1); } } }递归相较于循环,代码比较简洁,但是时间和空间消耗比较大,效率低。在实际的学习与工作中,根据情况选择使用。
"如何使用二分法查找"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数组
二分法
索引
元素
位置
范围
循环
方式
递归
数值
生成
成功
代码
效率
目标
目标值
排序
最大
最小
之间
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
安徽专科计算网络技术
网络安全意识教育内容
娄底找软件开发工作
电脑建立服务器
电脑网络安全主板
数据库带毫秒的时间参数
网络安全宣传手绘画简单
sybase数据库锁类型
学好网络技术的激励句子
java发送文件到服务器
工业控制软件开发价格
u8数据库里没有新年度的数据库
服务器php模块是什么
生产服务器会变慢吗
近五年网络安全事件
广州云计算服务器
我的世界无序之界服务器
武汉网络安全专业就业怎么样
内网服务器连不上web
前程网络技术上海有限公司
中小学网络安全知识竞赛怎么进
国际服刺激战场比赛服务器
dns服务器哪个国家最好
深圳软件开发公司 已倒闭
如何做电脑软件开发
mc服务器懒人
哇嘎无法更新服务器和节点列表
数据库边距设置
2021年数据库工程师考试答案
吉林市bim软件开发工程