二分法查找算法的java实现

suiyuefuchen 2010-04-23 09:32:09

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);
}
}








在机子上调试过了,成功;有兴趣的朋友尝试导入;欢迎有其他方法的朋友分享代码;
...全文
203 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
suiyuefuchen 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 keeya0416 的回复:]
o 好像是找不到的话会导致数组下标越界 呵呵
写的不错
算法是程序的根本
虽然Java不怎么在乎算法
但也是很有学习的必要的 呵呵 加油
[/Quote]

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

不过,仍然要谢谢这位仁兄帮忙提意见;你的慧眼让我看清了修改的方向,再次谢谢;
keeya0416 2010-04-23
  • 打赏
  • 举报
回复
o 好像是找不到的话会导致数组下标越界 呵呵
写的不错
算法是程序的根本
虽然Java不怎么在乎算法
但也是很有学习的必要的 呵呵 加油
suiyuefuchen 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 keeya0416 的回复:]
先祝贺下楼主

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

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

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

谢谢楼上的朋友,替我拓宽了思维,再改进一下;
keeya0416 2010-04-23
  • 打赏
  • 举报
回复
先祝贺下楼主

楼主的代码如果找一个本就不存在于数组中的数会不会死循环了
suiyuefuchen 2010-04-23
  • 打赏
  • 举报
回复
结果图片插不进去,只能用复制了,结果如下;

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
恭喜你找到元素

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧