二分法查找算法的java实现

时间:2021-02-27 22:13:11

package TestErfenCha;


public class TestErfenCha {
public static void search(int shu, int[] arr){
int len = arr.length-1;
int min = 0, max = len, mid = (max-min)/2;
int count = 2;
while(shu!=arr[mid]){

if(shu<arr[mid]){
min = min;
max = mid-1;
mid = min+(max-min)/2;
System.out.println("第"+count+"次的最小值是:"+arr[min]);
System.out.println("第"+count+"次的中间是:"+arr[mid]);
System.out.println("第"+count+"次的最大值是:"+arr[max]);
}
else if(shu>arr[mid]){
min = mid+1;
max = max;
mid = min+(max-min)/2;
System.out.println("第"+count+"次的最小值是:"+arr[min]);
System.out.println("第"+count+"次的中间是:"+arr[mid]);
System.out.println("第"+count+"次的最大值是:"+arr[max]);
}

if(shu==arr[mid]){
System.out.println("恭喜你找到元素");
break;

}
count++;

}
}



public static void main(String[] args){
int arr[] = new int[15];
for(int i=0;i<15;i++){
arr[i] = i+3;
System.out.print(arr[i]+" ");
}
System.out.println();
search(8,arr);
}
}





[img=C:\Documents and Settings\Administrator\桌面][/img]


在机子上调试过了,成功;有兴趣的朋友尝试导入;欢迎有其他方法的朋友分享代码;

6 个解决方案

#2


结果图片插不进去,只能用复制了,结果如下;

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
第2次的最小值是:3
第2次的中间是:6
第2次的最大值是:9
第3次的最小值是:7
第3次的中间是:8
第3次的最大值是:9
恭喜你找到元素

#3


先祝贺下楼主

楼主的代码如果找一个本就不存在于数组中的数会不会死循环了

#4


引用 3 楼 keeya0416 的回复:
先祝贺下楼主

楼主的代码如果找一个本就不存在于数组中的数会不会死循环了


这位楼上的朋友问得好;刚在csdn新闻网页上看到这个题目,自己就临时动手做了一下;所以有些问题没有考虑清楚;

我刚才用不存在的数试了一下,抛出异常;不是死循环,因为即使都找不到,所有的数都会计算到最后,只是找不到而已;

谢谢楼上的朋友,替我拓宽了思维,再改进一下;

#5


o  好像是找不到的话会导致数组下标越界  呵呵
写的不错
算法是程序的根本
虽然Java不怎么在乎算法
但也是很有学习的必要的  呵呵  加油

#6


引用 5 楼 keeya0416 的回复:
o 好像是找不到的话会导致数组下标越界 呵呵
写的不错
算法是程序的根本
虽然Java不怎么在乎算法
但也是很有学习的必要的 呵呵 加油


是的,不存在的数字因为穷尽了所有数字都找不到,然后数字有加减,导致下标越界;用存在的数字实验是正确的;

不过,仍然要谢谢这位仁兄帮忙提意见;你的慧眼让我看清了修改的方向,再次谢谢;

#1


#2


结果图片插不进去,只能用复制了,结果如下;

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
第2次的最小值是:3
第2次的中间是:6
第2次的最大值是:9
第3次的最小值是:7
第3次的中间是:8
第3次的最大值是:9
恭喜你找到元素

#3


先祝贺下楼主

楼主的代码如果找一个本就不存在于数组中的数会不会死循环了

#4


引用 3 楼 keeya0416 的回复:
先祝贺下楼主

楼主的代码如果找一个本就不存在于数组中的数会不会死循环了


这位楼上的朋友问得好;刚在csdn新闻网页上看到这个题目,自己就临时动手做了一下;所以有些问题没有考虑清楚;

我刚才用不存在的数试了一下,抛出异常;不是死循环,因为即使都找不到,所有的数都会计算到最后,只是找不到而已;

谢谢楼上的朋友,替我拓宽了思维,再改进一下;

#5


o  好像是找不到的话会导致数组下标越界  呵呵
写的不错
算法是程序的根本
虽然Java不怎么在乎算法
但也是很有学习的必要的  呵呵  加油

#6


引用 5 楼 keeya0416 的回复:
o 好像是找不到的话会导致数组下标越界 呵呵
写的不错
算法是程序的根本
虽然Java不怎么在乎算法
但也是很有学习的必要的 呵呵 加油


是的,不存在的数字因为穷尽了所有数字都找不到,然后数字有加减,导致下标越界;用存在的数字实验是正确的;

不过,仍然要谢谢这位仁兄帮忙提意见;你的慧眼让我看清了修改的方向,再次谢谢;