java实现二分法的完整代码

  

二分法查找,顾名思义就是要将数据每次都分成两份然后再去找到你想要的数据,我们可以这样去想,二分法查找很类似与我们平时玩的猜价格游戏,当你报出一个价格时裁判会告诉你价格相对于真实值的高低,倘若是低了那我们一定会再说出一个略高的价格,反之亦然。在二分法查找时要求传入的数据必须已经有序,假设现在为升序,然后每次将所寻找的值与中间值(数组左边界+(右边界——左边界)/2)作比较,大了则去寻找中间值左侧数据,小则寻找中间值右侧数据。
  

  

二分法查找比较局限性的就是只能操作一个已经排序了的数组。

  

<强>方法一

  

下面为一个二分法实现的完整代码

        包的二分法;   进口java.util.Arrays;   进口java.util.Scanner;   进口静态java.lang.System.out;   公开课Erchange {      私有静态扫描;   公共int找到(int [], int b)//为所要查找的数   {   int中期、低=0,高;   高=a.length-1;   而(low<=高)   {   中期=低+(高低)/2;   如果(b<[中])   {   高=mid-1;   }   else if (b>[中])   {   低=中期+ 1;   }   其他的   {   返回中期+ 1;   }   }   返回0;   }   公共静态void main (String [] args) {   int [];   int t;   int和=0;   新Erchange Erchange p=();   int q2=0;=新扫描仪(系统);   out.println(“请输入数组长度”);   q2=in.nextInt ();=new int (q2);   out.println(“请输入数组元素”);   for (int i=0; i      

<强>方法二

  

代码实现:

        公开课BinarySearch {//进行二分法查找的前提是数组已经有序!   公共静态int排名(int, int num [])   {//查找范围的上下界   int低=0;   int高=nums.length-1;//未查找到的返回值   int notFind=1;   而(low<=高)   {//二分中点=数组左边界+(右边界——左边界)/2//整数类型默认取下整   int中期=低+(高低)/2;//中间值是如果大于关键   如果(num(中期)在键)   {//证明关键在[低,mid-1]这个区间//因为num(中期)已经判断过了所以下界要减一   高=mid-1;   }else if (num[中]& lt;键)   {//证明关键在[+ 1,中期高]这个区间//同样判断过中期对应的值要从+ 1往中期后判断   低=中期+ 1;   }   其他的   {//查找成功   返回中期;   }   }//未成功   返回notFind;   }   公共静态void main (String [] args) {   System.out.println(“请输入数据数量:”);   扫描仪扫描仪=new扫描仪(系统);   int金额=scanner.nextInt ();   int num;   int num []=new int(数量);   int i=0;   而(i<数量)   {   num[我]=scanner.nextInt ();   我+ +;   }   Arrays.sort (num);   System.out.println(“请输入想要查找的值”);   int关键=scanner.nextInt ();   int回答=排名(关键,num);   如果(答案!=1)   {   System.out.println(“所查找的数据存在:”+ num[答案]);   }   其他的   {   System.out.println(“您所查找的数据不存在”);   }   }      }   之前      

<强>方法三,算法代码实现之二分法查找

  

封装成类:

        包com.roc.algorithms.search;/* *   *二分法查找   *   * @author中华民国   */公开课BinarySearch {/* *   * @param升序排列的数组   * @param k待查找的整数   * @return如果查到有就返回对应角标,没有就返回1   */公共静态int搜索(int [], int k) {   int lo=0,你好=3ざ? 1;   而(lo & lt;=你好){   int m=(lo +嗨)在祝辞1;   如果([m] & lt;k) {   lo=m + 1;   }else if ([m]比;k) {   你好=m - 1;   其他}{   返回m;   }   }   返回1;   }   }   

java实现二分法的完整代码