C语言实现算法二分查找

二分查找是一种高效的查找算法,但是有一个很重要的限制:数组必须要有序,不一定要连续,但是一定要有序。

我们看一个例子:在12345678910中找到自己需要的数字:

//函数实现二分查找
int Binary_search(int arr[], int a, int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left <= right)
	{
		int mid = left + (right - left) / 2;//这样的中间值让代码更扛造
		if (arr[mid] > a)
		{
			right = mid - 1;
		}
		else if (arr[mid] < a)
		{
			left = mid + 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int a = 0;
	int sz = sizeof(arr) / sizeof(arr[1]);
	scanf("%d", &a);
	if (Binary_search(arr, a, sz) == -1)
	{
		printf("没找到");
	}
	else
	{
		printf("找到了,下标是 %d", Binary_search(arr, a, sz));
	}
}

二分查找就是每次都是一半,一半的找。 找到数组的第一个下标和最后一个下标,得到中间的下标,每次用中间下标的值,对比想要找的值,中间值比想要的值小,就把第一个下标改到中间下标的后一个下标上,再比较中间值和想要的值,如果中间值比想要值大,就把最后一个下标改到中间下标的前一个下标上,再比较中间值和想要的值。然后循环下去,直到找到了或者没找到。

中间值比想要的值小:

中间值比想要的值大:

ps:我们算中间值的方法有很多种,我这里用的方法可以让代码数字小点,扛造一点。

相关推荐

  1. 算法二分查找C语言版)

    2024-04-01 03:38:05       14 阅读
  2. C语言-二分查找

    2024-04-01 03:38:05       26 阅读
  3. [C语言]二分查找

    2024-04-01 03:38:05       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 03:38:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 03:38:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 03:38:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 03:38:05       20 阅读

热门阅读

  1. Golang基础-8

    2024-04-01 03:38:05       13 阅读
  2. 算法D60 | 单调栈3 | 84.柱状图中最大的矩形

    2024-04-01 03:38:05       16 阅读
  3. 探索Python中的集成方法:Stacking

    2024-04-01 03:38:05       15 阅读
  4. 在ros中获取两个坐标系的外参关系

    2024-04-01 03:38:05       13 阅读
  5. leetcode 2952.需要添加的硬币的最小数量

    2024-04-01 03:38:05       18 阅读
  6. Kubernetes operator系列:Cue语言基础学习

    2024-04-01 03:38:05       26 阅读