使用C语言编程实现折半查找算法
时间: 2023-11-25 14:00:59 浏览: 108
折半查找算法(也称二分查找)是一种用于有序数组的查找算法,它的时间复杂度为O(log n)。下面是使用C语言实现折半查找的代码:
```c
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int key) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; //未找到
}
int main() {
int arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 23;
int index = binarySearch(arr, 0, n - 1, key);
if (index == -1) {
printf("未找到");
} else {
printf("元素 %d 的索引为 %d", key, index);
}
return 0;
}
```
在上面的代码中,我们定义了一个 `binarySearch` 函数来实现折半查找。该函数接受四个参数:要查找的有序数组 `arr`,左边界 `left`,右边界 `right` 和要查找的元素 `key`。在函数体内,我们使用 `while` 循环来不断缩小查找范围,直到找到要查找的元素或者查找范围为空。具体实现中,我们首先计算出中间元素的索引 `mid`,然后将其与要查找的元素 `key` 进行比较。如果相等,则返回 `mid`;如果 `arr[mid] < key`,则说明要查找的元素在中间元素的右侧,更新 `left = mid + 1`;如果 `arr[mid] > key`,则说明要查找的元素在中间元素的左侧,更新 `right = mid - 1`。如果未找到要查找的元素,则返回 `-1`。
在上面的代码中,我们还定义了一个 `main` 函数来测试 `binarySearch` 函数。我们首先定义了一个有序数组 `arr`,然后计算出数组的长度 `n`。接下来,我们定义要查找的元素 `key` 为 `23`,并将它传递给 `binarySearch` 函数。最后,我们判断是否找到了要查找的元素,并输出结果。
阅读全文