参考:http://www.cnblogs.com/lulipro/p/6262248.html
int binarySearch(int[] arr,int target)
{
int low = 0;
int high = arr.length - 1;
int mid=-1;
while (low <= high)
{
mid = (high-low)/2 + low ; //使用 (low+high) /2 可能会溢出。由于low和high的和可能会超过int所能表示的范围 因此用 (high-low)/2+low 来表示mid
if (arr[mid] < target)
low = mid + 1;
else if (arr[mid] > target)
high = mid - 1;
else //arr[mid] == target
return mid; // found
}
return -1; // not found.
}
最坏时间复杂度为 O(log
n)呢? (注意:计算机科学中, log 默认都是以2为底的)
最坏的状况为:咱们去查找数组中的最后一个元素(或者第一个元素),由于他们都最偏离中间,须要不断折半,直到最后折半后的数组只剩下一个元素。
假设这个数组长度为 n ,且假设 2
x = n ;那么 让n 递归的除以2,须要x次,才能近视为1。x即为时间须要循环的次数。
x = log
n