算法思想:
将n个元素分成个数大致相同的两半,取 a[n/2] 与 x 进行比较。如果 x = a[n/2],则找到 x ,算法终止。如果 x < a[n/2],则只要在数组的 a 的左半部分继续搜索 x 。如果 x > a[n/2],则只要在数组的 a 的右半部分继续搜索 x 。
具体算法:
public static int binarySearch(int[] a,int x) { int n = a.length; int left = 0; int rigth = n - 1; while(left < right) { int middle = (left + right) / 2; if(a[middle] == x) { return middle; } if(a[middle] > x) { right = middle - 1; } else(a[middle] < x) { left = middle + 1; } } return -1; }
时间复杂度分析:
T(n)= T(n/2)+O(1)
由于a=1, b=2, k=0,a=𝒃^𝐤, 则:
T(n)= O(log n)