C语言之二分查找

在一个数组中查找一个指定的数字是否存在,存在则打印下标:

上面是常规操作。

然后就是二分查找的内容了。如果是用一般方法一个一个排查,效率低下,数组内容多了就不太可以了,那么可以从中间开始比较大小,一次就可以排除掉一半的内容了,依据这个思路,再排查一次,每次少掉一半,这样效率会高很多,这就是二分查找,但是前提是有序的数组。

有了这个思路,那么就要先找到数组中间的元素,也就是最两边下标的平均值,然后再去比较。

接下来就是比较,如果目标数字比中间的大的话,那么就得排除中间元素左边所有值,最左边的下标为mid+1,如果小的话,就得排除右边所有值,最右边的下标为mid-1。

但是这些查找不止一次,所以要循环,每查找一次就缩小,所以left和right迟早会碰头,如果最后left>大于right了,就说明没有目标数字了,所以循环的条件是left<right。

综上,代码的结果是:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个数组
	int k = 0;
	scanf("%d", &k);//输入想要查找的值
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0, right = sz - 1;//左右下标
	while (left <= right)
	{
		int mid = (right + left) / 2;//中间元素下标
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else 
		{
			printf("下标为%d", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到");
	}

	return 0;
}

以上就是关于二分查找的全部内容了。 

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 14:50:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 14:50:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 14:50:04       87 阅读
  4. Python语言-面向对象

    2024-04-05 14:50:04       96 阅读

热门阅读

  1. Linux运维-SHELL编程之正则表达式与流编辑处理器

    2024-04-05 14:50:04       37 阅读
  2. 数据结构中的堆

    2024-04-05 14:50:04       33 阅读
  3. “心灵想要大声呼喊。”

    2024-04-05 14:50:04       44 阅读
  4. CCF CSP模拟真题解答示例

    2024-04-05 14:50:04       39 阅读
  5. 2024-04-04 问AI: 在深度学习中,微调是什么?

    2024-04-05 14:50:04       46 阅读
  6. C库函数详解(一)

    2024-04-05 14:50:04       33 阅读
  7. 学python的第七天

    2024-04-05 14:50:04       34 阅读
  8. 58. 最后一个单词的长度 —— LeetCode (python)

    2024-04-05 14:50:04       38 阅读
  9. ACM linux 驱动验证

    2024-04-05 14:50:04       43 阅读
  10. 每日一题 --- 前 K 个高频元素[力扣][Go]

    2024-04-05 14:50:04       36 阅读
  11. 蓝桥杯算法基础(37)BFS与DFS

    2024-04-05 14:50:04       27 阅读