java语言实现二分查找数据法

今天在看《代码之美》这本书的时候看到了一个二分查找数据的方法,自己一时兴起,就照着书上的代码敲了一下,等到运行的时候才发现,书上的代码是错的,于是就自己去琢磨了一下查找的方法,想了一下午,拿了十张纸才计算出这个正确的结果,这里拿来与大家分享了!

这个是我自己写的!

/**
  * 二分数组查找法
  * @param value 要查找的值
  * @return 返回字符串
  */
 private String eachWard(int value)
 {
  String message="";
  try{
   int inner=0;
   int lower=arrays.length-1;
   if(arrays.length>0){
    while(true){
     int num = (inner+lower)/2;
        if(arrays[num]==value){message="找到数组元素--->在数组中的下标为:"+num;break;} 
        if(arrays[num]>value){lower=num-1;}
        if(arrays[num]<value){inner=num+1;}
        if(lower<inner){message="没有找到该元素!";break;}
       }
   }else{
    message="传入数组不能为空!";
   }
  }
  catch(NullPointerException err){
  message="传入数组为空!请传入合法数组!"; 
  }
  return message; 
 }

另外我要声明的是:“二分查找法”查找的只能是已经从小到大排好序的数组,因此在使用此方法时,需要特别的注意!

 

这个是书上给的代码:

public static int buggyBinarySearch(int[] a, int target) {
int low = 0;
int high = a.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
int midVal = a[mid];
if (midVal < target)

low = mid + 1;
else if (midVal > target)
high = mid - 1;
else
return mid;
}
return -1;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值