二分法检索(binary search)又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组中,首先将给定值key与数组中间位置上元素的关键码(key)比较,如果相等,则检索成功;
否则,若key小,则在数组前半部分中继续进行二分法检索;
若key大,则在数组后半部分中继续进行二分法检索。
这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。
二分法检索是一种效率较高的检索方法。比如,我们要在数组[7, 8, 9, 10, 12, 20, 30, 40, 50, 80, 100]中查询到10元素,过程如下:
package cn.sxt.oo; import java.util.Arrays; public class TestBinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = { 30,20,50,10,80,9,7,12,100,40,8}; //第一步,排序 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); System.out.println(MyBinarySearch(arr,40)); } 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; } if(value>arr[mid]) { low = mid + 1; } if(value<arr[mid]) { high = mid - 1; } } return -1; } }
参考文献:速学堂
