public class BinarySearch{
public static int binarySearch(int[] array,int value){//传入数组与待查找的值,传入的数组必须是有序数组
int start=0;//开始位置
int end=array.length-1;//终点位置
int middle=0;//中点位置
while(start<=end){//开始索引小于等于结束索引
middle=(start+end)/2;
if(array[middle]==value){//如果中点值大于目标值
return middle;
}
if(array[end]>array[start]){//判断数组是否升序
if(array[middle]>value){//如果中点值大于目标值
end=middle-1;//将终点想前移,抛弃中点之后的元素索引
}
if(array[middle]<value){//如果中点值小于目标值
start=middle+1;//将起点位置向后移,抛弃中点之前的元素索引
}
}else{ //降序
if(array[middle]>value){//如果中点值大于目标值
start=middle+1; //将起点位置向后移,抛弃中点之前的元素索引[中点之前的元素都是大于目标值的]
}
if(array[middle]<value){ //如果中点值小于目标值
end=middle-1; //将终点想前移,抛弃中点之后的元素索引[中点之后的元素都是小于目标值的]
}
}
}
return -1;
}
public static void main(String[] args){
int[] arr={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};//升序数组
int[] arr2={20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};//降序数组
int result1= binarySearch(arr,15);
int result2= binarySearch(arr2,15);
System.out.println(result);
System.out.println(result2);
}
}