用C语言写一个二分搜索算法
时间: 2023-12-29 20:45:15 浏览: 20
当然可以!下面是一个简单的二分搜索算法的C语言代码:
```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);
}
return -1;
}
```
这个函数接受一个包含要搜索元素的整数数组arr,左右边界索引l和r以及要查找的值x。它将在数组中搜索x,如果找到则返回其索引,否则返回-1。该算法具有对数时间复杂度。
相关问题
帮我用C语言写一个二分查找算法
当然可以!以下是一个简单的二分查找算法的 C 代码示例:
```c
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;
}
```
该算法的时间复杂度为 O(log n),其中 n 为数组的大小。
用c语言写一个二分算法
### 回答1:
可以使用以下步骤来编写二分搜索算法:1. 首先,定义一个数组和搜索值。
2. 将左指针设置为数组的第一个元素,将右指针设置为数组的最后一个元素。
3. 如果左指针和右指针相等,则搜索失败,返回 -1。
4. 找出中间元素的索引,并将其作为中间指针。
5. 如果中间元素的值与搜索值相等,则搜索成功,返回中间指针的索引。
6. 如果搜索值比中间元素的值小,则将右指针设置为中间指针 -1。
7. 如果搜索值比中间元素的值大,则将左指针设置为中间指针 +1。
8. 重复步骤3-7,直到搜索成功或失败。
### 回答2:
二分查找算法,也称为折半查找算法,是一种高效的查找算法,适用于有序的数据集合。以下是用C语言实现的二分查找算法:
```C
#include <stdio.h>
int binarySearch(int arr[], int target, int left, int right) {
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, 3, 5, 7, 9, 11, 13};
int target = 7;
int n = sizeof(arr) / sizeof(arr[0]); // 数组长度
int result = binarySearch(arr, target, 0, n - 1);
if (result != -1) {
printf("目标元素%d在数组中的索引位置是%d\n", target, result);
}
else {
printf("目标元素%d不在数组中\n", target);
}
return 0;
}
```
以上代码中,使用了`binarySearch`函数来实现二分查找。函数的参数包括要查找的数组`arr`,目标元素`target`,以及数组的左右边界索引`left`和`right`。在函数内部,使用一个循环来不断缩小查找范围,直到找到目标元素或查找范围为空。在每次循环中,计算中间元素的索引`mid`,将目标元素与中间元素进行比较,根据比较结果来更新查找范围的边界。如果找到目标元素,则返回其索引;如果查找范围为空仍未找到目标元素,则返回-1。
在`main`函数中,定义了一个有序数组`arr`和目标元素`target`,然后调用`binarySearch`函数进行二分查找。最后根据返回的结果判断是否找到目标元素,并输出相应的提示信息。
以上就是使用C语言实现二分查找算法的代码。二分查找算法的时间复杂度为O(logn),其中n为数据集合的大小。所以二分查找是一种高效的查找算法,适用于有序的数据集合。
### 回答3:
二分算法,也称为折半查找算法,是一种高效的查找方法。它的原理是,将有序数组分为左右两部分,每次取中间元素与目标元素进行比较,根据比较结果判断目标元素在左半部分还是右半部分,并在相应的半部分中继续查找,直到找到目标元素或查找范围为空。
以下是用C语言实现的二分算法的代码:
```
#include <stdio.h>
int binarySearch(int arr[], int target, int low, int high) {
while(low <= high) {
int mid = (low + high) / 2; // 计算中间位置
if(arr[mid] == target) {
return mid; // 找到目标元素,返回索引
}
if(arr[mid] < target) {
low = mid + 1; // 目标元素在右半部分,更新查找范围
}
else {
high = mid - 1; // 目标元素在左半部分,更新查找范围
}
}
return -1; // 找不到目标元素,返回-1
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int target = 6;
int size = sizeof(arr) / sizeof(arr[0]);
int result = binarySearch(arr, target, 0, size - 1);
if(result == -1) {
printf("目标元素不存在\n");
}
else {
printf("目标元素在数组的索引为:%d\n", result);
}
return 0;
}
```
以上代码定义了一个 `binarySearch` 函数,接受一个有序数组 `arr`、目标元素 `target`、查找范围的最低索引 `low` 和最高索引 `high` 作为参数。函数使用一个 `while` 循环进行迭代查找,直到找到目标元素或查找范围为空。
在 `main` 函数中,定义了一个有序数组 `arr`,目标元素为 `6`。通过调用 `binarySearch` 函数进行查找,并输出结果。
该算法的时间复杂度为 O(log n),相较于线性查找的 O(n) 时间复杂度更加高效。