本篇内容主要讲解“Java中的二分查找是什么意思”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的二分查找是什么意思”吧!
对于一个有序的数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并求出下标,如果没有就提示”没有这个数据”。
鸿蒙官方战略合作共建——HarmonyOS技术社区
首先确定该数组中间的下标 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; } } }
到此,相信大家对“Java中的二分查找是什么意思”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。