问题描述
在编程过程中,我们经常会遇到一个常见的问题:如何在C语言中实现二分查找?
解决方案
C语言提供了一种简单有效的方法来解决这个问题。我们可以使用两个指针,一个指向数组的开始,另一个指向数组的结束。然后,我们可以找到中间元素,并将其与目标值进行比较。如果目标值小于中间元素,我们就在左半部分数组中查找;如果目标值大于中间元素,我们就在右半部分数组中查找。
代码
以下是一个C语言函数,它接受一个排序后的整数数组、数组的长度和目标值作为输入,然后返回目标值在数组中的索引。如果目标值不在数组中,函数返回-1。
#include <stdio.h>
int binary_search(int* arr, int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 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, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 3;
int index = binary_search(arr, n, target);
if (index != -1) {
printf("目标值%d在数组中的索引是:%d\n", target, index);
} else {
printf("目标值%d不在数组中。\n", target);
}
return 0;
}
运行结果
总结
这个函数首先将左指针设置在数组的开始,右指针设置在数组的结束。然后,它计算出中间元素,并将其与目标值进行比较。如果目标值小于中间元素,它就在左半部分数组中查找;如果目标值大于中间元素,它就在右半部分数组中查找。当左指针大于右指针时,函数就完成了它的任务。