思想:
利用有序的特点,平均意义上,每次查找缩减一般的查找规模,进而提高查找速度。
关键点:
- 存储结构为顺序存储,且关键字之间有序
- l <= r,不能l < r
- 中间下标计算溢出问题,m = (l + r)/2 可能会溢出,使用减法,m = (r - l)/2 + l
代码:
#include <stdio.h>
int BinSearch(int *a, int n, int t) {
int l = 0;
int r = n - 1;
while (l <= r) {
int m = (r - l) / 2 + l;
if (a[m] == t) {
return m;
} else if (a[m] < t) {
l = m + 1;
} else {
r = m - 1;
}
}
return -1;
}
int main() {
int a[] = {1, 2, 3, 4, 5};
int n = sizeof(a) / sizeof(int);
printf("%d\n", BinSearch(a, n, 1));
printf("%d\n", BinSearch(a, n, 5));
printf("%d\n", BinSearch(a, n, 3));
printf("%d\n", BinSearch(a, n, -1));
printf("%d\n", BinSearch(a, n, 100));
return 0;
}