元素应该在数组中的哪个位置,以便二进制搜索算法的运行时间为O(log n)?
答案 0 :(得分:1)
第一个或最后一个元素将在二进制搜索中给出最坏情况的复杂性,因为您必须进行最大数量的比较。 例如:
1 2 3 4 5 6 7 8 9
在这里搜索1会给你最坏的情况,结果将在第4遍传出。
1 2 3 4 5 6 7 8
在这种情况下,搜索8将给出最坏情况,结果是4次传递。
请注意,在第二种情况下,只需3次传递即可完成搜索1(第一个元素)。 (比较1和4,比较1& 2,最后1)
所以,如果没有。元素是偶数,最后一个元素给出了最坏的情况。
这假设所有数组都被索引为0。这是因为将mid作为(start + end)/ 2的浮点数。
答案 1 :(得分:0)
//迭代二进制搜索的Java实现
class BinarySearch
{
// Returns index of x if it is present in arr[],
// else return -1
int binarySearch(int arr[], int x)
{
int l = 0, r = arr.length - 1;
while (l <= r)
{
int m = l + (r-l)/2;
// Check if x is present at mid
if (arr[m] == x)
return m;
// If x greater, ignore left half
if (arr[m] < x)
l = m + 1;
// If x is smaller, ignore right half
else
r = m - 1;
}
// if we reach here, then element was
// not present
return -1;
}
// Driver method to test above
public static void main(String args[])
{
BinarySearch ob = new BinarySearch();
int arr[] = {2, 3, 4, 10, 40};
int n = arr.length;
int x = 10;
int result = ob.binarySearch(arr, x);
if (result == -1)
System.out.println("Element not present");
else
System.out.println("Element found at " +
"index " + result);
}
}
时间复杂性: 二进制搜索的时间复杂度可以写为
T(n)= T(n / 2)+ c 可以使用Recurrence T ree方法或Master方法解决上述重现。在Master方法II中,并且复发的解决方案是Theta(Logn)。
辅助空间:在迭代实现的情况下为O(1)。在递归实现的情况下,O(Logn)递归调用堆栈空间。