二分查找算法的概念、原理、效率以及使用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;
}

相关推荐
码事漫谈6 小时前
当AI开始“思考”:我们是否真的准备好了?
前端·后端
2301_764441336 小时前
LISA时空跃迁分析,地理时空分析
数据结构·python·算法
东北洗浴王子讲AI6 小时前
GPT-5.4辅助算法设计与优化:从理论到实践的系统方法
人工智能·gpt·算法·chatgpt
Billlly7 小时前
ABC 453 个人题解
算法·题解·atcoder
玉树临风ives7 小时前
atcoder ABC 452 题解
数据结构·算法
feifeigo1237 小时前
基于马尔可夫随机场模型的SAR图像变化检测源码实现
算法
铁东博客8 小时前
Go实现周易大衍筮法三变取爻
开发语言·后端·golang
fengfuyao9858 小时前
基于STM32的4轴步进电机加减速控制工程源码(梯形加减速算法)
网络·stm32·算法
oak隔壁找我8 小时前
SpringBoot中MyBatis的Mapper的原理
后端
oak隔壁找我8 小时前
Spring Boot 自动配置(Auto-configuration)的核心原理
后端