写一个c语言的二分查找
时间: 2023-03-15 14:41:36 浏览: 70
我可以为你提供一个c语言的二分查找算法,它可以帮助你在有序数组中查找某个特定的值: int binarySearch(int arr[], int l, int r, int x)
{
if (r >= l)
{
int mid = l + (r - l)/2;
// 如果中间元素是要查找的元素,则返回这个元素的索引
if (arr[mid] == x)
return mid;
// 如果中间元素比要查找的元素大,则搜索左半部分
if (arr[mid] > x)
return binarySearch(arr, l, mid-1, x);
// 如果中间元素比要查找的元素小,则搜索右半部分
return binarySearch(arr, mid+1, r, x);
}
// 如果没有找到,则返回-1
return -1;
}
相关问题
写一个C语言的二分查找法
以下是一个基本的二分查找算法的C语言实现:
```c
#include <stdio.h>
int binarySearch(int arr[], int n, int target) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int index = binarySearch(arr, n, target);
if (index != -1) {
printf("找到了 %d,它在数组的第 %d 个位置。\n", target, index);
} else {
printf("没有找到 %d。\n", target);
}
return 0;
}
```
我们定义了一个函数 `binarySearch`,它接收三个参数:一个整数数组 `arr`,数组的长度 `n` 和需要查找的目标值 `target`。函数的返回值是目标值在数组中的下标,如果找不到则返回 -1。
在函数内部,我们定义了两个变量 `low` 和 `high`,它们分别表示当前查找范围的左右边界。初始时,我们将左边界设为 0,右边界设为数组长度减 1。
接着进入一个循环,只要左边界小于等于右边界,就继续查找。在每次循环中,我们计算出当前查找范围的中间点 `mid`,然后判断目标值是否等于中间点的值。如果是,返回中间点的下标。如果目标值比中间点的值大,则在右半部分继续查找,否则在左半部分查找。
如果函数最终没有找到目标值,就返回 -1。
用c语言写一个二分查找
二分查找(二分法)是一种在已排序的数组中查找特定元素的搜索算法。该算法从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束。如果目标元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,并且忽略中间元素。通过递归的方式,可以在数组中不断地查找目标元素。
下面是用C语言实现的二分查找算法:
```c
#include <stdio.h>
int binarySearch(int arr[], int l, int r, int x)
{
if (r >= l) {
int mid = l + (r - l) / 2;
// 如果中间元素就是要查找的元素,则返回其下标
if (arr[mid] == x)
return mid;
// 如果中间元素大于要查找的元素,则在左半部分继续查找
if (arr[mid] > x)
return binarySearch(arr, l, mid - 1, x);
// 如果中间元素小于要查找的元素,则在右半部分继续查找
return binarySearch(arr, mid + 1, r, x);
}
// 如果数组中不存在要查找的元素,则返回 -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);
if (result == -1)
printf("Element is not present in array");
else
printf("Element is present at index %d", result);
return 0;
}
```
这个程序首先定义了一个 binarySearch 函数,该函数接受一个已排序的数组、数组的左右边界和要查找的元素作为参数。如果数组中存在要查找的元素,则返回其下标;否则返回 -1。
在 main 函数中,我们定义了一个已排序的整数数组并在其中查找元素10。如果元素存在,则输出其下标;否则输出“Element is not present in array”。