折半查找的C语言代码和过程
时间: 2024-05-05 09:22:03 浏览: 71
c语言编写的折半查找
折半查找,也叫二分查找,是一种在一个有序数组中查找某个特定元素的搜索算法。它的基本思想是将有序数组从中间分成两部分,然后判断目标元素在哪一部分,如果在左半部分,则在左半部分进行查找,否则在右半部分进行查找。重复这个过程,直到找到目标元素或者确定目标元素不存在。
以下是一个使用C语言实现折半查找的代码和过程:
```c
#include <stdio.h>
int binary_search(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int index = binary_search(arr, n, target);
if (index == -1) {
printf("目标元素不存在\n");
} else {
printf("目标元素的下标是:%d\n", index);
}
return 0;
}
```
代码解释:
1. `binary_search` 函数是实现折半查找的核心函数。
2. `left` 和 `right` 分别表示数组的左边界和右边界。
3. 在 `while` 循环中,计算中间位置 `mid`。
4. 如果 `arr[mid]` 等于目标元素 `target`,说明找到了目标元素,返回 `mid`。
5. 如果 `arr[mid]` 小于目标元素 `target`,说明目标元素在右半部分,将左边界 `left` 更新为 `mid + 1`。
6. 如果 `arr[mid]` 大于目标元素 `target`,说明目标元素在左半部分,将右边界 `right` 更新为 `mid - 1`。
7. 如果 `while` 循环结束后还未找到目标元素,说明目标元素不存在,返回 -1。
8. 在 `main` 函数中,定义一个有序数组 `arr`,并计算数组长度 `n`。
9. 定义目标元素 `target`,调用 `binary_search` 函数进行查找。
10. 如果返回的下标是 -1,说明目标元素不存在,输出提示信息。
11. 否则,输出目标元素的下标。
折半查找的时间复杂度是 O(log n),比线性查找的时间复杂度 O(n) 要快很多,因此在大规模数据的查找中,折半查找是一个更好的选择。
阅读全文