C语言实现有序表的二分法查找
时间: 2024-03-17 08:47:37 浏览: 78
好的,以下是C语言实现有序表的二分法查找的示例代码:
```c
#include <stdio.h>
int binary_search(int a[], int n, int key) {
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (key == a[mid]) {
return mid;
} else if (key < a[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1; // 没有找到
}
int main() {
int a[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int n = sizeof(a) / sizeof(int);
int key = 7;
int index = binary_search(a, n, key);
if (index != -1) {
printf("找到了 %d,位置是 %d。\n", key, index);
} else {
printf("没找到 %d。\n", key);
}
return 0;
}
```
以上代码中,`binary_search` 函数接收三个参数:一个有序数组 `a`,数组元素个数 `n` 和要查找的关键字 `key`。函数使用两个变量 `low` 和 `high` 分别表示查找区间的下界和上界,然后在每一轮循环中计算出中间位置 `mid`,用 `key` 和 `a[mid]` 进行比较,根据比较结果缩小查找区间,直到找到关键字或者确定关键字不存在。
在 `main` 函数中,我们定义了一个有序数组 `a`,并使用 `sizeof` 运算符计算出数组元素个数 `n`,然后调用 `binary_search` 函数进行查找,最后输出查找结果。
注意,以上代码中没有进行错误处理,实际使用中需要考虑数组为空、关键字不存在等异常情况。
阅读全文