为了账号安全,请及时绑定邮箱和手机立即绑定

这个二分查找法有一点不懂

这个二分查找法有一点不懂

慕先生4463397 2017-10-12 16:25:09
/** * 二分法查找 * 二分法查找建立在已经排序好的基础上   */public class BinaryChopTest { public static void main(String[] args) { int []arry = {1,3,4,5,8,10,15,25,29}; Scanner in = new Scanner(System.in); System.out.println("请输入您要查找的元素:"); int num = in.nextInt(); System.out.println(binarySearch(arry,num)); } public static String binarySearch(int [] a,int num){ int begin = 0; int end = a.length-1; while(begin<=end){ int mid = (begin+end)/2; if(a[mid]==num){ return "您输入的数的下标是:"+mid; } if(a[mid]>num){ end = mid-1; } if(a[mid]<num){ begin = mid+1; } } return "您输入的数不在当前数组中"; }}最后那两个if啥意思不太懂
查看完整描述

1 回答

?
芝麻大点

TA贡献7条经验 获得超1个赞

这里是重新定义区间的方法,第一个if:如果输入的值小于中间值,则输入的值肯定在前半段,所以结束值向前移一位,第二个if:这个则相反,如果输入值大于中间值,则输入的值肯定在后半段,所以开始值向后移一位,这样就慢慢接近输入的那个值了。

查看完整回答
反对 回复 2017-10-12
  • 慕先生4463397
    慕先生4463397
    package com.zdhddcjj.数组2; public class Dichotomy { public static void main(String[] args) { int arr[]={1,3,5,8,45,87,99,33}; System.out.println(lookup(arr,1)); } public static String lookup(int[] arr,int num){ int index=arr.length-1; int value=0; while(value<=index){ int miv=(index+value)/2; if(arr[miv]==num){ return "您输入的下标是:"+miv; } if(arr[miv]<num){ index=miv-1; } if(arr[miv]>num){ value=miv+1; } } return "您输入的数不在数组之中"; } } 就是只有查找1查找不出来
  • 1 回答
  • 0 关注
  • 1527 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信