有时候,我们总是会忽略一些很简单的题,直到在笔试中被检验!!!惊喜于题目的简单,惊讶于测试用例一直通不过的悲哀,然而笔试也不会再重来一次,你也不知道到底是错在哪里了。。。。格式吗?who konws。。
唯一的方法就是再敲一遍
如下:非递归二分查找,递归二分查找
//我这里写的是无返回值的,也可以写成有返回值的,都可以
public class Test3 {
public static void main(String[] args) {
int[] arr=new int[]{1,2,3,5,8,19,24,46};
int key=19;
// binarySerach1(arr,key);
binarySearch(arr,0,arr.length-1,key);
}
/**
* 非递归实现二分查找
* @param arr
* @param key
*/
public static void binarySerach1(int[] arr,int key){
int start=0;
int end=arr.length-1;
while (start<end){
int mid=(start+end)/2;
if (arr[mid]>key){
end=mid-1;
}else {
if (arr[mid]<key){
start=mid+1;
}else {
System.out.println(mid+1);
break;
}
}
}
}
/**
* 递归实现二分查找
* @param arr
* @param start
* @param end
* @param key
*/
public static void binarySearch(int[] arr,int start,int end,int key){
int mid=(start+end)/2;
if (start>end || key<arr[start] || key>arr[end]){
System.out.println(-1);
}
if (arr[mid]>key){
binarySearch(arr,start,mid-1,key);
}else {
if (arr[mid]<key){
binarySearch(arr,mid+1,end,key);
}else {
System.out.println(mid+1);
}
}
}
}