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