二分查找分为3个流程:
- 一开始,范围覆盖整个数组。
- 将数组的中间项与T进行比较,如果T比数组的中间项要小,则到数组的前半部分继续查找,反之,则到数组的后半部分继续查找。
- 如此,每次查找可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。
具体实现:
1 | int BinarySearch(int array[], int n, int value) |
注意:
- 如果令
left <= right,则right = middle - 1;
- 如果令
left < right,则 right = middle;
即算法所操作的区间,是左闭右开区间,还是左闭右闭区间,这个区间,需要在循环初始化。且在循环体是否终止的判断中,以及每次修改left, right区间值这三个地方保持一致,否则就可能出错。