1.首先找到中间位置
int data[] = {1, 3, 5, 6, 7, 8, 9};//定义数组
int low=0;//最小下标
int high=data.length-1;//最大下标
int mid=(low+high)/2;//中间位置
2.判断要查找的值和中间下标的大小,并做比较,小的话high=mid-1 ;大的话low=mid+1
if(x==data[mid]) return mid;
else if(x<data[mid]){//
high=mid-1;//下标最大值改变
}
else if(x>data[mid]){
low=mid+1;//下标最小值值改变
}
3.完整代码
/**
* 二分查找
*/
public class AlgorithmTest {
public static void main(String[] args) {
int data[] = {1, 3, 5, 6, 7, 8, 9};
//二分查找
int index=binarySearch(data,9);
System.out.println("二分查找下标:》》》"+index);
//二分递归查找
int indexRecursion=binarySearch(data,9,0,data.length-1);
System.out.println("二分查找下标(递归):》》》"+indexRecursion);
}
//二分查找
public static int binarySearch(int [] data,int x){
int low=0;//最小下标
int high=data.length-1;//最大下标
while(low<=high){
int mid=(low+high)/2;//二分后下标位置
if(x==data[mid]) return mid;
else if(x<data[mid]){//
high=mid-1;//下标最大值改变
}
else if(x>data[mid]){
low=mid+1;//下标最小值值改变
}
}
return -1;
}
//递归二分查找
public static int binarySearch(int[] data,int x,int low,int high){
if(x<data[low]||x>data[high]||low>high) return -1;
int mid=(low+high)/2;
if(x<data[mid]){
return binarySearch(data,x,low,mid-1);
}else if(x>data[mid]){
return binarySearch(data,x,mid+1,high);
}else{
return mid;
}
}
}
4.测试结果