Requirement: need an ordered set of data.
大概思路:
设置一对low and high pts,在进行while(left <= right)的循环,在循环中,设置一个mid pt which equals to (low+high)/2。if([mid] = target) return mid
if( [mid] < target) high = mid - 1; else low = mid + 1; return low;
public static int binarySearch(int[] arr, int x) {
int low = 0;
int high = arr.length-1;
while(low <= high) {
int middle = (low + high)/2;
if(x == arr[middle]) {
return middle;
}else if(x <arr[middle]) {
high = middle - 1;
}else {
low = middle + 1;
}
}
return -1;
}
二分法的时间复杂度:O(logN)
二分法的关键思想是 假设该数组的长度是N那么二分后是N/2,再二分后是N/4……直到二分到1结束(当然这是属于最坏的情况了,即每次找到的那个中点数都不是我们要找的),那么二分的次数就是基本语句执行的次数,于是我们可以设次数为x,N*(1/2)^x=1;则x=logn,底数是2,