用c语言编写一段二分法代码
时间: 2023-04-03 15:03:10 浏览: 68
以下是用 C 语言编写的二分法代码:
```c
#include <stdio.h>
int binarySearch(int arr[], int l, int r, int x) {
while (l <= r) {
int mid = l + (r - l) / 2;
if (arr[mid] == x)
return mid;
if (arr[mid] < x)
l = mid + 1;
else
r = mid - 1;
}
return -1;
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = binarySearch(arr, 0, n - 1, x);
(result == -1) ? printf("Element is not present in array")
: printf("Element is present at index %d", result);
return 0;
}
```
这段代码实现了二分法查找一个有序数组中是否存在某个元素,如果存在则返回该元素的下标,否则返回 -1。
相关问题
用matlab写一段二分法代码
下面是一个简单的二分法的 MATLAB 代码示例:
```
function [root, num_iterations] = bisection_method(func, a, b, tol)
% func: 函数句柄,表示要求解的函数
% a, b: 区间 [a, b],在该区间内寻找函数的根
% tol: 容差,当函数的值小于该值时,我们认为找到了根
% 初始化迭代次数为 0
num_iterations = 0;
% 判断函数在两端点处的符号是否相同
if sign(func(a)) == sign(func(b))
error("Function has same sign at end points");
end
% 当前区间的中点
midpoint = (a + b) / 2;
% 重复迭代直到找到满足容差要求的根
while abs(func(midpoint)) > tol
% 如果函数在中点处的值与区间左端点处的值同号,说明根在右半区间
if sign(func(midpoint)) == sign(func(a))
a = midpoint;
% 否则根在左半区间
else
b = midpoint;
end
% 更新中点
midpoint = (a + b) / 2;
% 迭代次数加 1
num_iterations = num_iterations + 1;
end
% 找到了根,输出结果
root = midpoint;
end
```
这个代码中,我们首先判断了函数在区间两端点的符号是否相同,如果相同就抛出一个错误。然后我们进行迭代,每次都将区间缩小到原来的一半,并根据函数值的符号确定根所在的区间。最后,当函数值小于容差时,我们认为已经找到了根。代码返回根的值和迭代次数。
用c语言写一个二分法递归
很高兴为您服务,我可以尝试回答您的问题。使用C语言实现二分法递归需要了解递归函数的使用,以及在数组中查找所需数据的基本操作。首先,需要创建一个接收数组,并将其初始化为数据。然后,需要定义一个二分法递归函数,它接收三个参数:数组,查找值和数组大小。在递归函数中,首先找到数组中间元素,如果要查找的值等于中间元素,则返回中间元素的索引,如果查找的值小于中间元素,则在数组左边调用递归函数,反之则在右边调用递归函数,直到找到所需值为止。