我有一个排序数组。
对于前。 {1,2,3,4,5,6,7,8}
如果我搜索元素8,那么需要4次迭代才能得到真或假的结果。我所知道的是二进制搜索的运行时间上限为O(logn),在这种情况下结果为3。
如果我错了,有人可以帮助我解决这个困惑或纠正我的概念吗?
我的代码如下:
public static boolean BinarySearch(int[] arr, int num){
int mid, low, high;
int count = 0;
low = 0; high = arr.length -1;
while( low <= high ){
mid = low + (high-low)/2;
if(arr[mid] == num)
return true;
else if(arr[mid]<num)
low = mid +1;
else
high = mid -1;
}
return false;
}
答案 0 :(得分:0)
O 表示法的要点是隐藏不太重要的术语,以便更简单地表达复杂性。因此,尽管二进制搜索的复杂性是 O(lg n)是正确的,但确切的表达式可能是 ceil(lg n)+ 1 ,甚至< em> c ceil(lg n)+ b 对于任何 c 和 b ( ceil()操作是必要的从对数中得到一个整数结果。)