二分法查找
二分法检索又称折半检索,二分法的基本思想是数组中的元素从小到大有序地存放在数组中,先后先将给定的key与数组中间的key比较,如果相等,则检索成功;
否则,若key小,则在数组的前半部分继续二分法检索;
若key大,则在数组的后半段中进行二分法检索;
如此这样,经过一次的比较就缩小一半的检索区间,如此这般,直到检索成功或者检索失败。
二分法是一种效率比较高的检索方法,比如,我们要在数组[7,8,9,10,11,12,13,14,15,16,17] 中查到10元素
第一步
找到数组的中间值20 ,因为10比20小所以去20的左边
第二步
最半边的中间值9 ,因为9比10小所以取9的右边
第三步
还剩10和11 在比较一次就找到了
package cn.dct.oop;
import java.util.Arrays;
/**
* 测试二分法查找
* @author Alex
*
*/
public class TestBinarySearch {
public static void main(String[] args) {
int[] arr= {30,20,50,10,80,9,7,12,100,40,8};
Arrays.sort(arr); //先进行由小到大的排序,必须
int value=10;//要查找的值
System.out.println(Arrays.toString(arr));
System.out.println(myBinarySearch(arr,value));
}
public static int myBinarySearch(int[] arr ,int value) {
int low=0;
int high=arr.length-1;
while(low<=high) {
int mid=(low+high)/2;
if(value==arr[mid]) {
return mid;
}else if(value>arr[mid]) {
low=mid+1;
}else if(value<arr[mid]) {
high=mid-1;
}
}
return -1;
}
}
结果===============================
[7, 8, 9, 10, 12, 20, 30, 40, 50, 80, 100]
3