能用c语言写一段代码吗,这段代码是一段二分查找的代码
时间: 2023-03-21 22:01:06 浏览: 51
可以,下面是一段简单的二分查找代码: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, mid + 1, r, x);
// 如果元素比中间元素小,则搜索左半部分
return binarySearch(arr, l, mid - 1, x);
}
// 没有找到元素
return -1;
}
相关问题
用c语言写一段代码求解查找最后一个小于等于指定数的元素问题
好的,以下是用C语言写的求解查找最后一个小于等于指定数的元素问题的代码:
```
#include <stdio.h>
int main()
{
int arr[10] = {1, 3, 4, 5, 6, 7, 8, 9, 12, 15}; // 定义一个有序数组
int target = 10; // 指定要查找的数
int len = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
int low = 0, high = len - 1; // 定义查找范围
// 如果要查找的数比数组中最小的数还小,就无法找到
if (target < arr[0])
{
printf("无法找到小于等于 %d 的数\n", target);
return -1;
}
// 如果要查找的数比数组中最大的数还大,就直接返回最大的数
if (target >= arr[len - 1])
{
printf("%d\n", arr[len - 1]);
return 0;
}
while (low <= high) // 二分查找
{
int mid = (low + high) / 2;
if (arr[mid] <= target && (mid == len - 1 || arr[mid + 1] > target))
{
printf("%d\n", arr[mid]);
return 0;
}
else if (arr[mid] <= target)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
printf("无法找到小于等于 %d 的数\n", target);
return -1;
}
```
这段代码会输出小于等于指定数的最后一个元素,如果找不到就输出一条提示信息。注意,这段代码没有处理输入的部分,需要在上面的代码基础上添加适当的输入处理代码。
生成一段折半查找的c语言代码
### 回答1:
int binarySearch(int array[], int size, int target)
{
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (array[mid] == target)
return mid;
if (array[mid] < target)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
### 回答2:
折半查找,也称为二分查找,是一种常用的查找算法。以下是一段使用C语言实现的折半查找代码:
```c
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
// 如果目标值在中间值的左侧,则在左半部分继续查找
if (arr[mid] > target)
right = mid - 1;
// 如果目标值在中间值的右侧,则在右半部分继续查找
else if (arr[mid] < target)
left = mid + 1;
// 如果中间值等于目标值,则找到了目标值,返回索引
else
return mid;
}
// 如果没有找到目标值,返回-1
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11};
int target = 7;
int size = sizeof(arr) / sizeof(arr[0]);
int index = binarySearch(arr, 0, size - 1, target);
if (index != -1)
printf("目标值 %d 的索引为 %d。\n", target, index);
else
printf("目标值 %d 不存在于数组中。\n", target);
return 0;
}
```
在这段代码中,`binarySearch`函数实现了折半查找的逻辑。它接收一个有序数组`arr`、数组的左边界`left`、右边界`right`和目标值`target`作为参数,并返回目标值在数组中的索引(如果找到)或-1(如果未找到)。
在`main`函数中,我们定义了一个有序数组`arr`和目标值`target`,然后调用`binarySearch`函数进行二分查找。最后根据返回的索引进行输出。如果目标值存在于数组中,输出目标值和它的索引;否则输出目标值不存在于数组中。
### 回答3:
折半查找,也称为二分查找,是一种在有序数组中查找特定元素的常用算法。以下是一个基于递归实现的折半查找的C语言代码示例:
```c
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int target)
{
if (right >= left)
{
int mid = left + (right - left) / 2;
if (arr[mid] == target)
return mid;
if (arr[mid] > target)
return binarySearch(arr, left, mid - 1, target);
return binarySearch(arr, mid + 1, right, target);
}
return -1;
}
int main()
{
int arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 16;
int result = binarySearch(arr, 0, n - 1, target);
if (result == -1)
printf("目标元素不在数组中\n");
else
printf("目标元素在数组中的索引为:%d\n", result);
return 0;
}
```
以上示例中,我们首先定义了一个递归函数 `binarySearch`,接收一个有序数组 `arr[]`,数组的左索引 `left`,右索引 `right`,以及要查找的目标元素 `target`。在函数内部,我们首先计算数组的中间元素 `arr[mid]`,并与目标元素 `target` 进行比较。如果二者相等,说明目标元素已找到,返回中间元素的索引 `mid`。如果目标元素小于中间元素,说明目标元素可能在数组的左半部分,我们递归调用 `binarySearch`,缩小范围在左半部分进行查找。如果目标元素大于中间元素,说明目标元素可能在数组的右半部分,我们递归调用 `binarySearch`,缩小范围在右半部分进行查找。如果以上都不满足,说明目标元素不存在于数组中,返回 -1。
在 `main` 函数中,我们定义了一个有序数组 `arr` 和目标元素 `target`,然后调用 `binarySearch` 函数进行查找。最后根据查找结果,输出相应的信息。
以上就是一个简单的折半查找的C语言代码示例。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)