非递归实现二分查找
/*
* 二分查找
*
*A 定义最大索引,最小索引
*B 计算出中间索引
*C 拿中间索引的值和要查找的值进行比较
* 相等:就返回当前的中间索引
* 不相等:
* 大: 左边找
* 小:右边找
*D 重新计算出中间索引
* 大: 左边找
* max=mid-1;
* 小: 右边找
* min=mid+1;
*E 回到B
*
*
*
*/
public class MyScore2 {
public static void main(String[] args) {
//定义一个数组
int[] arr={11,22,33,44,55,66,77};
//写功能实现
int index=getIndex(arr, 33);
System.out.println("index:"+index);
index=getIndex(arr, 333);
System.out.println("index:"+index);
}
/*
* 两个明确
* 参数类型:int
* 参数列表:int[] arr;int value
*
*/
public static int getIndex(int[] arr,int value){
//定义最大索引,最小索引
int max=arr.length-1;
int min=0;
//计算出中间索引
int mid=(max+min)/2;
//拿中间所引的值和需要查找的值比较
while(arr[mid]!=value){
if(arr[mid]>value){
max=mid-1;
}else if(arr[mid]<value){
min=mid+1;
}
if(min>max){
return -1;
}
mid=(max+min)/2;
}
return mid;
}
}
递归实现二分查找
//递归实现二分查找
public class MyScort3 {
public static void main(String[] args) {
int[] arr = new int[] { 1, 3, 10, 100 };
// int index = recursionSerch(arr, 3,0,10);
// System.out.println(index);
System.out.println(recursionSerch(arr, 3,0,100));
}
public static int recursionSerch(int[] arr, int max,int min,int n) {
int mid;
mid=(max+min)/2;
if(min>max) return -1;
if(arr[mid]==n) return mid;
else if(arr[mid]>n)
return recursionSerch(arr,mid-1,min,n);
else
return recursionSerch(arr,max,mid+1,n);
}
}