📅  最后修改于: 2021-01-12 03:32:14             🧑  作者: Mango
在本章中,我们将讨论另一种基于分而治之的算法。
二进制搜索可以在排序的数组上执行。在这种方法中,确定元素x的索引是否该元素属于元素列表。如果数组未排序,则使用线性搜索来确定位置。
在此算法中,我们要查找元素x是否属于存储在数组number []中的一组数字。其中, l和r表示应在其中执行搜索操作的子数组的左右索引。
Algorithm: Binary-Search(numbers[], x, l, r)
if l = r then
return l
else
m := ⌊(l + r) / 2⌋
if x ≤ numbers[m] then
return Binary-Search(numbers[], x, l, m)
else
return Binary-Search(numbers[], x, m+1, r)
线性搜索以O(n)时间运行。二进制搜索以O(log n)时间生成结果
令T(n)为n个元素数组中最坏情况下的比较次数。
因此,
$$ T(n)= \ begin {cases} 0&if \:n = 1 \\ T(\ frac {n} {2})+ 1&else \ end {cases} $$
使用此递归关系$ T(n)= log \:n $。
因此,二进制搜索使用$ O(log \:n)$时间。
在此示例中,我们将搜索元素63。