需要对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数,看这个数是否存在于数组中array,并找到下标,如果没有,会提示“没有该数据”。思路分析首先确定数组中间的下标mid=(left+right)/2。然后比较要找的数findValue和arr[mid],findValue>arr[mid],说明要找的数在arr[mid]],所以向右递归。findValuerightcodecasepackagecom.xie.search;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;publicclassBinarySearch{staticintcount=0;publicstaticvoidmain(String[]args){int[]arr=newint[102];arr[0]=1;arr[1]=1;for(inti=2;i<102;i++){arr[i]=i;}ListindexList=binarySearch(arr,0,arr.length-1,1);System.out.println("indexList="+indexList);System.out.println("搜索次数:"+count);/*indexList=[1,0]查找次数:6*/}/***二分查找,找到所有满足值的索引集合**@paramarrarray*@paramleftleftindex*@paramrightrightindex*@paramfindValue搜索到的值*@return找到则返回所有索引的集合,找不到则返回空*/publicstaticListbinarySearch(int[]arr,intleft,intright,intfindValue){count++;ListindexList=newArrayList();//当left>right时,递归完成if(left>right){returnnewArrayList();}intmid=(left+right)/2;intmidVal=arr[mid];if(findValue>midVal){//查找到的值大于中间值,递归向右returnbinarySearch(arr,mid+1,right,findValue);}elseif(findValueright||arr[temp]!=findValue){break;}indexList.add(temp);temp++;}indexList.add(mid);returnindexList;}}}[编辑推荐】惊呆了,一个SQL,Oracle炸了...我用Python制作微信动态表情7个提高工作效率的工具,非常适合新手MicrosoftEdge90正式版发布:新增下载管理菜单,字体渲染更清晰阿里云盘PC版初体验:不限速但还是遗憾