二分法c语言代码(递归、迭代)

递归代码如下:

include <stdio.h>

int BSearch(int d[], int target, int low, int high)
{//第二个参数是要找的数,返回下标
	if (low <= high)
	{
		int m = (low + high) / 2;
		if (target < d[m])
			return BSearch(d, target, low, m - 1);
		else if (target>d[m])
			return BSearch(d, target, m + 1, high);
		else
			return m;
	}
	return -1;
}



void main()
{
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 100, 2000, 5000, 9999 };
	int c = BSearch(a, 2000, 0, 13);
	printf_s("c:%d\n", c);
	getchar();
}

迭代代码如下:

#include <stdio.h>

int BSearch(int d[], int target, int low, int high)
{//第二个参数是要找的数,返回下标
	int m;
	while (low <= high)
	{
		m = (low + high) / 2;
		if (target < d[m])
			high = m - 1;
		else if (target>d[m])
			low = m + 1;
		else
			return m;
	}
	return -1;
}



void main()
{
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 100, 2000, 5000, 9999 };
	int c = BSearch(a, 2000, 0, 13);
	printf_s("c:%d\n", c);
	getchar();
}

代码思路很简单,在此不再说明!!

  • 17
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 下面是一个二分法的 C 语言程序代码示例: ```c #include <stdio.h> int binary_search(int arr[], int left, int right, int target) { 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}; int n = sizeof(arr) / sizeof(arr[0]); int target = 5; int result = binary_search(arr, 0, n - 1, target); if (result == -1) { printf("Element is not present in array\n"); } else { printf("Element is present at index %d\n", result); } return 0; } ``` 该程序使用一个名为 binary_search 的函数来实现二分查找。该函数接受要搜索的数组、要搜索的左端点和右端点,以及要搜索的目标值作为参数。函数在 while 循环中执行二分查找,直到找到目标值或确定目标值不在数组中为止。如果找到目标值,则返回其索引;否则,函数返回 -1。 在主函数中,我们定义了一个包含 5 个元素的整数数组,并将要查找的目标值设置为 5。然后,我们调用 binary_search 函数来搜索数组中是否存在目标值,并打印结果。 ### 回答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}; int target = 7; 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`、左边界 `left` 和右边界 `right`。循环中,通过计算中间索引 `mid` 来确定目标元素在左半部分还是右半部分,然后不断更新左右边界,缩小搜索范围,直到找到目标元素或搜索范围为空。 在 `main` 函数中,定义了一个有序数组 `arr` 和目标元素 `target`,并计算数组的大小。然后调用 `binarySearch` 函数进行搜索,最后根据返回的结果输出搜索结果。 以上就是一份使用C语言实现的二分法代码。 ### 回答3: 二分法,也称为折半查找,是一种在有序数组中查找指定元素的算法。下面是一个使用C语言编写的简单二分法程序代码: ```c #include <stdio.h> int binarySearch(int arr[], int left, int right, int key) { while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == key) return mid; else if (arr[mid] < key) left = mid + 1; else right = mid - 1; } return -1; } int main() { int arr[] = {2, 4, 6, 8, 10, 12, 14, 16}; int n = sizeof(arr) / sizeof(arr[0]); int key = 10; int result = binarySearch(arr, 0, n - 1, key); if (result == -1) printf("元素 %d 不存在于数组中\n", key); else printf("元素 %d 存在于数组中,索引位置为 %d\n", key, result); return 0; } ``` 上述程序首先定义了一个`binarySearch`函数实现二分法查找。该函数中的`arr`参数代表有序数组,`left`和`right`参数表示数组的左边界和右边界,`key`参数是待查找的元素。函数使用一个循环不断将查找区域缩小,直到找到目标元素或查找区域为空。 在`main`函数中,定义了一个有序数组`arr`并计算它的大小。然后设定了待查找的元素`key`为10,调用`binarySearch`函数进行查找。最后根据返回的结果判断待查找的元素是否存在于数组中,并输出相应的信息。 以上是一个简单的使用C语言编写的二分法程序,可以快速在有序数组中查找指定元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值