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

相关推荐
snakecy4 分钟前
自然语言处理(NLP)算法原理与实现--Part 1
人工智能·算法·自然语言处理
SimonKing6 分钟前
还在为HTML转PDF发愁?再介绍两款工具,为你保驾护航!
java·后端·程序员
创码小奇客7 分钟前
Spring Boot依赖排坑指南:冲突、循环依赖全解析+实操方案
后端·面试·架构
萌新彭彭13 分钟前
vLLM主要模块Scheduler详解
算法·源码阅读
灵动小溪16 分钟前
时频信号分析总结
算法
CoovallyAIHub17 分钟前
让Qwen-VL的检测能力像YOLO一样强,VLM-FO1如何打通大模型的视觉任督二脉
深度学习·算法·计算机视觉
Java天梯之路20 分钟前
09 Java 异常处理
java·后端
Penge66621 分钟前
Go 通道引用与 close 操作
后端
一 乐22 分钟前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·小程序
2401_8414956429 分钟前
【自然语言处理】基于统计基的句子边界检测算法
人工智能·python·算法·机器学习·自然语言处理·统计学习·句子边界检测算法