您现在的位置是:亿华云 > IT科技
Java编程内功-数据结构与算法「二分查找」
亿华云2025-10-09 11:06:10【IT科技】8人已围观
简介需求对于一个有序的数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并求出下标,如果没有就提示”没有这个数据”。思路分析首先确定该数组中间的下标 mid=(
需求
对于一个有序的编程数组进行二分查找{ 1,8,10,89,1000,1234},输入一个数看看该数组是内功否存在此数,并求出下标,数据算法如果没有就提示”没有这个数据”。结构
思路分析
首先确定该数组中间的分查下标 mid=(left+right)/2. 然后让需要查找的数findValue和arr[mid]比较,findValue > arr[mid],编程说明要查找的内功数在arr[mid]的右边,因此向右递归.findValue < arr[mid],数据算法说明要查找的云服务器结构数在arr[mid]的左边,因此向左递归.findValue == arr[mid],分查说明找打,编程就返回。内功 退出递归的数据算法条件找到就结束递归。递归完整个数组仍然没有找到findValue,结构需要结束递归,分查即当 left > right代码案例
package com.xie.search; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class BinarySearch { static int count = 0; public static void main(String[] args) { int[] arr = new int[102]; arr[0] = 1; arr[1] = 1; for (int i = 2; i < 102; i++) { arr[i] = i; } List<Integer> indexList = binarySearch(arr, 0, arr.length - 1, 1); System.out.println("indexList = " + indexList); System.out.println("查找次数:" + count); /* indexList = [1, 0] 查找次数:6 */ } /** * 二分查找,查找符合值得所有索引集合 * * @param arr 数组 * @param left 左边索引 * @param right 右边索引 * @param findValue 查找的值 * @return 找到就返回所有索引的集合,没有就返回空 */ public static List<Integer> binarySearch(int[] arr, int left, int right, int findValue) { count++; List<Integer> indexList = new ArrayList<Integer>(); //当left > right时,说明递归完毕 if (left > right) { return new ArrayList<Integer>(); } int mid = (left + right) / 2; int midVal = arr[mid]; if (findValue > midVal) { //查找的香港云服务器值比中间值大,向右递归 return binarySearch(arr, mid + 1, right, findValue); } else if (findValue < midVal) { //查找的值比中间值小,向左递归 return binarySearch(arr, left, mid - 1, findValue); } else { //如果找到了,再向左扫描,将满足条件的加入indexList int temp = mid - 1; while (true) { if (temp < 0 || arr[temp] != findValue) { break; } indexList.add(temp); temp--; } //再向右扫描,将满足条件的加入indexList temp = mid + 1; while (true) { if (temp > right || arr[temp] != findValue) { break; } indexList.add(temp); temp++; } indexList.add(mid); return indexList; } } }【编辑推荐】
惊呆,一条SQL,Oracle炸了... 我用Python制作微信动态表情符 7款提升工作效率的工具,太适合新手小白了吧 微软 Edge 90 正式版发布:新增下载管理菜单,字体渲染更清晰 阿里云盘 PC 版抢先体验:不限速但仍有遗憾很赞哦!(589)
相关文章
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- HarmonyOS JS应用开发需要关注哪些线程?官方解析来啦
- HashMap 的 Hash 方法原理是什么?
- 解决方案架构师的软技能——超越技术能力
- 4、club娱乐
- 12种 Console 相关的方法,帮你快速提高调试效率!
- IEEE 2021编程语言排名:Python一骑绝尘、微软C#成为最大黑马
- 漫话:如何给女朋友解释什么是元宇宙?
- 互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
- Spring 声明式事务应该怎么学?