<分区>
二分查找是一种高效的 —其复杂度估计为 O(log2(n))
,而传统的顺序搜索为 O(n)
。这意味着,例如,对于一个包含 1024 个元素的数组,在最坏的情况下,当所需元素不在数组中时,线性搜索将处理所有 1024 个元素。二进制搜索足以处理 \(log_2(1024) = 10\) 元素。这个结果的实现是因为在循环的第一步之后,搜索区域缩小到 512 个元素,在第二步之后搜索区域缩小到 512 个元素。最多 256 等
该算法的缺点是需要数据排序,以及在恒定(与数据量无关)时间内访问任何数据元素的能力。因此,该算法不适用于无序数组和任何基于链表的数据结构。
实施
再见(右–左> 1) // 只要右边框在左边的右边
数控
中间 =(左 + 右)/< /span> 2; // 搜索区域中间
如果 (A[middle] >= b)那么
右=中间; // 移动右边框
否则
左边 = 中间; // 否则移动左边框
抄送
如果(A[右] == X)那么
正确的输出;
否则
输出-1;
其中:
A
- 源数组,
N
- 数组大小,
X
- 所需的数字。