二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现

二分查找的概念

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

实现原理

  1. 首先,假设表中元素是按升序排列,将表中的位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
  2. 否则利用中间位置记录将表分成前、后两个子表
  3. 如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  4. 重复以上过程,直到找到满足条件的记录,使查找成功。或直到子表不存在为止,此时查找不成功

图解

​编辑​

算法效率

时间复杂度为 O(log2n) 也就是说查找的最大次数为log2n

优点:查找效率高

缺点:必须采用顺序存储结构,,必须按关键字大小有序排列。

使用C语言代码实现

ini 复制代码
//二分查找
//给定一个有序数组,任意给定一个值,查找该值在数组的位置
int main()
{
	int arr[] = { 5,9,12,15,20,32,36,42,56,78,89 };
	int key = 36;  //要查找的值
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	int flag = 0;//标志位
	while (left <= right)//当数组未查找完成时
	{
		int mid = (left + right) / 2;
		if (arr[mid] > key)
		{
			right = mid - 1;
		}
		else if (arr[mid] < key)
		{
			left = mid + 1;
		}
		else
		{
			printf("arr[%d]=%d\n", mid, key);
			flag = 1;
			break;//如果没有break,代码会陷入死循环
		}

	}
	if (!flag)
	{
		printf("can't find!!\n");
	}
	return 0;
}

相关推荐
地平线开发者3 分钟前
征程6|YOLOv5x 在 Horizon 征程6 上的端到端部署实践(下)
算法·自动驾驶
speop22 分钟前
llm-algo-leetcode |Task01
算法·leetcode·职场和发展
艾为电子34 分钟前
【应用方案】电视沉浸式音频升级: 电视音频 awinic“芯片 + 算法” 一体化解决方案
算法·音视频
大熊背1 小时前
树莓派相机自动白平衡详解(二)
算法·白平衡·isppipeline
Code额1 小时前
Python 连接 DeepSeek API,OpenAI 对话方式总结
后端·python·ai·ai编程
星火10241 小时前
【LangChain4j系列10】Guardrails 安全护栏
人工智能·后端
四千岁1 小时前
稀疏向量BM25Retriever不支持中文怎么办?jieba来帮忙
前端·javascript·后端
用户6919026813391 小时前
Docker基本概念
后端·docker·容器
颜进强1 小时前
14 - OpenSpec 老页面改造骨架:定位 + 增量 + 回归三件套
前端·后端·ai编程
唐青枫1 小时前
别只把 switch 当成多路 if:Zig 模式匹配、状态机与 Tagged Union 实战
后端