一、描述:
在一个有序数组中查找某个数N。若找到,返回下标值;若未找到,则返回-1.
二、二分法的基本思想:
以升序数组为例, 二分查找的思路是先取中间位置的元素, 看要找的值比中间元素大还是小. 如果小, 就去左边找; 否则 就去右边找.
三、使用二分查找的要求:
(1)数组有序;
(2)适合大量数据中查找。
四、代码实现:
public class Java {
static int count=0;
public static void main(String[] args) {
int[] arr= makeBiggerArray();
int pos=binarySearch(arr,4);
System.out.println("下标为:"+pos);
System.out.println("需要查找次数:"+count);
}
public static int[] makeBiggerArray() { //在较大数组中查找指定元素
int[] arr1=new int[10000];
for(int i=0;i<arr1.length;i++) {
arr1[i]=i;
}
return arr1;
}
public static int binarySearch(int[] arr,int toFind) { //二分查找方法
int left=0;
int right=arr.length-1;
while(left<=right) {
count++;
int mid=(left+right)/2;
if(toFind<arr[mid]) { //在左侧区域查找
right=mid-1;
}
else if(toFind>arr[mid]) { //在右侧区域查找
left=mid+1;
}
else {
return mid; //找到了返回下标值。
}
}
return -1; //未找到返回-1
}
}