二分法查找的实现【java实现二分法查找】

2025-11-20 02:43:26

1、理清思路:首先得明确最简单的基础,就是如何实现二分法查找,很简单的想到的是取中间值,比较要查找的值,查找对象。我们可以先创建一个类,进行简单的处理。如下图:

class find{

public int  Dicfind(int min,int max,int a[],int value){

    return value;}

}

二分法查找的实现【java实现二分法查找】

2、定义一个类,然后写一个方法来接收一个数组的下标和要查找的值,二分法首先是对中间那个数和要查找的数进行比较,即有

class find{

public int  Dicfind(int min,int max,int a[],int value){

int mid=(min+max)/2;

//比较a[mid]和value

if(a[mid]>value){

 

}

return value;

}

}

二分法查找的实现【java实现二分法查找】

3、现在就是思考的难点来了,如何分析并继续下一步查找问题,例如给你一组数据a[]={1,2,4,5,6};查找的值为2,第一次查找mid=2;a[2]>2;那么如何进行下一步查找呢,这里我们使用递归调用,这就是为什么我们要设置方法返回类型为int的原因(实现递归)。代码如下:

class find{

public int  Dicfind(int min,int max,int a[],int value){

int mid=(min+max)/2;

int i=0;

//比较a[mid]和value

if(a[mid]>value){

return Dicfind(min,mid-1,a,value);

}

return value;

}

}

二分法查找的实现【java实现二分法查找】

4、同理进行a[mid]<value;a[mid]>value;a[mid]=value的出理,具体代码如下:

class find{

public  int  Dicfind(int min,int max,int a[],int value){

int mid=(min+max)/2;

//比较a[mid]和value

if(a[mid]>value){

return Dicfind(min,mid-1,a,value);

} if(a[mid]<value){

return Dicfind(mid+1,max,a,value);

}

if(a[mid]==value){

System.out.println("查到这个数了:是第"+(mid+1)+"数");

}

return value;

}

}

二分法查找的实现【java实现二分法查找】

5、然后在main方法中测试一下,具体代码如下,为了方便调用我们把方法写出静态的,方便使用。执行看到效果(下图所示)!具体代码如下:

package demo2;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

  int[] a={1,2,3,4,5};

  find.Dicfind(0, a.length-1, a, 2);

}

}

class find{

public static int  Dicfind(int min,int max,int a[],int value){

int mid=(min+max)/2;

//比较a[mid]和value

if(a[mid]>value){

return Dicfind(min,mid-1,a,value);

} if(a[mid]<value){

return Dicfind(mid+1,max,a,value);

}

if(a[mid]==value){

System.out.println("查到这个数了:是第"+(mid+1)+"数");

}  

return -2;

}

}

二分法查找的实现【java实现二分法查找】

6、如果你觉得这就算完成了二分法查找这个例子的话,那你就还需要思考更多。比如,如果没有这个数怎么办,你可以在上面那个代码中测试,然后寻找问题。以下是本人思考后,对简单二分法查找数组元素的优化代码。仅供参考!

package demo2;

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

  int[] a={1,3,4,5};

  for(int i=0;i<6;i++){

 System.out.println("查找的数字"+i);

 find.Dicfind(0, a.length-1, a, i);

  }

}

}

class find{

public static int  Dicfind(int min,int max,int a[],int value){

if(a[0]>value||a[max]<value){

System.out.println("没有这个数!");

} else{

int mid=(min+max)/2;

//比较a[mid]和value

if(a[mid]>value){

return Dicfind(min,mid-1,a,value);

} if(a[mid]<value){

return Dicfind(mid+1,max,a,value);

}

if(a[mid]==value){

System.out.println("查到这个数了:是第"+(mid+1)+"数");

}else return value;} 

return value;

}

}

二分法查找的实现【java实现二分法查找】

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢