使用二分法查找有序数组中指定的元素,二分法,就是折半查找,先从中间开始查询,如果中间的数小于查询的数,那么查询的区域就缩小到中间数以后的元素,如果中间数大于查询的数,那么查询的范围就缩小到下标为0到中间数,一直查询查询,直到找到要查询的数为止。对于折半查找,我这里有两种方法,代码如下:
第一种:
public static int getIndex(int[] arr,int target){
//第一个元素的下标值
int first = 0;
//第二个元素的下标值
int last = arr.length-1;
//查找数的下标值
int index=-1;
while(first<=last){
//中间下标值
int middle = (first+last)/2;
//等于
if(arr[middle]==target){
index = middle;
break;
}else if(arr[middle]>target){
last=middle;
}else if(arr[middle]<target){
first=middle+1;
}
}
return index;
}
这种方法是利用了while循环做的,对于简单的有序数组,它可以很快的查询出来,但是对于复杂的有序数组,查询结果就是错的,什么样的是复杂的有序数组呢?就是在一个有序数组中,有